gpt4 book ai didi

java - 需要选择什么序列化框架,在java中提供API来做呢?

转载 作者:行者123 更新时间:2023-12-02 09:30:22 24 4
gpt4 key购买 nike

我正在阅读有关 Avro 的内容,并且正在尝试比较 avro 与 java 序列化系统。但不知怎的,我无法判断为什么 avro 用于数据序列化而不是 java 序列化。事实上,为什么要出现另一个系统来取代java序列化系统呢?

这是我的理解的总结。要使用 java 序列化功能,我们必须使此类实现可序列化接口(interface)。如果您这样做并序列化对象,那么在反序列化期间,类似

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 不同吗?谁能帮助我更好地理解这一点?

最佳答案

内置的 Java 序列化有一些相当显着的缺点。例如,如果不仔细考虑,您可能无法反序列化一个可能没有更改数据、仅更改了类方法的对象。

您还可以创建一个情况,其中串行 uid 相同(手动设置),但由于两个系统之间的类型不兼容而实际上无法反序列化。

第 3 方序列化库可以通过使用抽象映射将数据配对在一起来帮助缓解这种情况。精心设计的序列化库甚至可以提供不同版本对象之间的映射。

最后,第 3 方序列化库的错误处理通常对开发人员或运算符(operator)更有用。

关于java - 需要选择什么序列化框架,在java中提供API来做呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58033708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com