Java序列化对象与非序列化对象

时间:2013-09-29 05:47:07

标签: java serialization

1)是否可以通过网络发送非序列化的java对象,以便由另一个JVM执行或存储在本地文件存储中以恢复数据? 2)序列化和存储java对象与存储java对象而不序列化它有什么区别?

4 个答案:

答案 0 :(得分:4)

序列化是一种将java对象表示为一系列字节的方法。它只是一种格式而已。 “内置”java序列化是一个类,它提供用于将java对象转换为一系列字节的API。而已。当然,反序列化是一个“补充”过程,允许将此二进制流转换回对象。

序列化/反序列化本身与“通过网络发送”事情无关。它只是方便发送一个二进制流,可以通过序列化从对象创建。

更有甚者,有时内置序列化不是获取二进制流的最佳方式,因为有时可以使用更少的字节来转换对象。

因此,您可以使用自定义协议,为序列化提供自己的自定义(例如,Externalizable

甚至使用第三方库,例如Apache Avro

我认为这有效地回答了你的两个问题:

  1. 如果需要,您可以将非序列化对象(我猜是那个没有实现“Serializable”接口的对象)自行转换为字节序列(字节流),然后通过网络发送,存储在二进制文件中,无论如何。 当然,您必须了解如何阅读此二进制格式以进行转换。

  2. 由于序列化只是一种转换协议,而不是“存储相关的东西”,答案是显而易见的。

  3. 希望这有帮助。

答案 1 :(得分:1)

简而言之,您不会在java中存储非序列化对象。所以我对两个问题都说不。

编辑:ObjectOutputStream和ObjectInputStream可以编写基元和可序列化对象,如果这就是你正在使用的。

答案 2 :(得分:1)

  

1)可以通过网络发送非序列化的java对象   由另一个JVM执行或存储在本地文件存储中以获取   数据恢复?

使用ObjectOutputStream通过网络发送对象进行编组。序列化是存储对象状态的Java标准方法。你可以设计自己做同样的事情,但除非你以标准的方式看到一个大问题,否则没有必要重新发明轮子。

  

2)序列化和存储java之间有什么区别   对象vs存储java对象而不序列化它?

Serialization使用ObjectOuputStream存储对象的状态,并且可以使用ObjectInputStream对其进行反序列化。序列化对象可以保存到文件中,也可以通过网络发送。序列化是实现这一切的标准方法。但是,如果你真的有意义的话,你总能发明自己的方法。

答案 3 :(得分:1)

序列化的目的是以自包含的方式存储对象的状态,不需要原始内存引用,运行时状态等。换句话说,对象可以表示为可以存储的位串在磁盘上,通过网络发送等。