2015-02-07 35 views
0

按照序列化定义,它是将数据结构或对象状态转换为可以存储的格式(例如,在文件或内存缓冲区中,或通过网络连接链接传输)的过程以及稍后在相同或另一个计算机环境中重建。是否需要Java序列化

除了通过网络传输对象之外,所有东西都是清晰的。序列化是java对象通过netowrk传输的唯一方法吗?

在web应用程序中,有许多POJO类没有实现可序列化的接口,但我们仍然可以从客户端访问这些类的对象。应用程序服务器或JVM是否处理这些类的序列化?

+1

您需要将序列化区分为使对象字节可传输的概念和Java序列化作为特定实现。将一个对象转换为XML,字符串或JSON也使它可以转换,但不使用Java序列化。 – eckes 2015-02-07 17:55:16

回答

2

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

通过网络传输数据的更便携和灵活的方式是将它们转换为XML/JSON,无论是Java,C++,python还是其他任何系统(可以在任何系统上使用)可能已经猜到了 - 对象不需要实现Serializable以便(从)到/到XML,Json等编组)。

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

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

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

0

Serializable是存储在会话中的对象所必需的,如果您想要使用持久性(幸存的应用程序服务器重新启动)和/或共享(跨多个应用程序服务器)会话。

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

相关问题