我正在阅读有关 Avro 的内容,并且正在尝试比较 avro 与 java 序列化系统。但不知怎的,我无法判断为什么 avro 用于数据序列化而不是 java 序列化。事实上,为什么要出现另一个系统来取代java序列化系统呢?以下是我的理解的总结。要使用 java 序列化功能,我们必须使此类实现可序列化接口。如果您这样做并序列化对象,那么在反序列化期间,类似e = (Employee) in.readObject();接下来我们可以使用 getter/setter 来处理员工对象。在 avro 中,首先是模式定义。接下来是使用 avro API 进行序列化。再次关于反序列化,有类似的事情。接下来我们可以使用 getter/setter 来处理员工对象。问题是我没有看到任何区别,只是使用它的 API 不同?谁能澄清我的疑问吗?public AvroHttpRequest deSerealizeAvroHttpRequestJSON(byte[] data) {DatumReader<AvroHttpRequest> reader = new SpecificDatumReader<>(AvroHttpRequest.class); Decoder decoder = null; try { decoder = DecoderFactory.get().jsonDecoder( AvroHttpRequest.getClassSchema(), new String(data)); return reader.read(null, decoder); } catch (IOException e) { logger.error("Deserialization error:" + e.getMessage()); }}接下来我们可以使用 getter/setter 来处理员工对象。问题是我没有看到这两种方法之间有任何区别。两者都做同样的事情。只是 API 不同吗?谁能帮助我更好地理解这一点?
1 回答
慕田峪4524236
TA贡献1875条经验 获得超5个赞
内置的 java 序列化有一些相当显着的缺点。例如,如果不仔细考虑,您可能无法反序列化一个可能没有更改数据、仅更改了类方法的对象。
您还可以创建一个情况,其中串行 uid 相同(手动设置),但由于两个系统之间的类型不兼容而实际上无法反序列化。
第三方序列化库可以通过使用抽象映射将数据配对在一起来帮助缓解这种情况。精心设计的序列化库甚至可以提供对象不同版本之间的映射。
最后,第三方序列化库的错误处理通常对开发人员或操作员更有用。
添加回答
举报
0/150
提交
取消