Java序列化是否必需

时间:2015-02-07 17:26:47

标签: java

根据序列化定义,它是将数据结构或对象状态转换为可以存储的格式(例如,在文件或内存缓冲区中,或通过网络连接链接传输)并稍后在其中重建的过程。或其他计算机环境。

除了通过网络传输对象之外,定义中的一切都很清楚。串行化是java对象通过netowrk传输的唯一方法吗?

在webapp的上下文中,有许多pojo类没有实现可序列化的接口,但我们仍然从客户端访问这些类的对象。 app服务器或JVM是否处理这些类的序列化?

2 个答案:

答案 0 :(得分:2)

您的类实际上不需要实现Serializable以便通过网络传输它们,因为有许多不同形式的序列化,而java的内置实际上并不是那么好。为什么?因为接收端必须也是 java 应用程序,并且它必须具有您要传输的类的兼容版本。

通过网络传输数据的更加便携和灵活的方式是marshal它们到XML / JSON,可以从任何系统使用,无论是java,c ++,python还是其他任何系统(和正如您可能已经猜到的那样 - 对象不需要实现Serializable以便(un)编组XML,Json等等。)

还有很多其他序列化框架比java的内置序列化机制更好地完成这项任务。一个例子是:谷歌的Protobuff,Apache Thrift,Avro,Kryo等等。

  

在webapp的上下文中,有许多pojo类没有实现可序列化的接口,但我们仍然从客户端访问这些类的对象。 app服务器或JVM是否处理这些类的序列化?

不,这是由应用程序或您正在使用的框架处理的。例如,Jax-RS实现将使用像Jakson这样的库来在后台将对象封送到Xml / Json或从Xml / Json封送。

答案 1 :(得分:0)

如果您想使用持久(幸存的应用服务器重启)和/或共享(跨多个应用服务器)会话,则会话中存储的对象需要

Serializable

客户端的数据传输通常不是由Java序列化(JSON / XML)完成的,正如其他人已经解释过的那样。