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

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

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

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

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

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

甚至使用像Apache Avro这样的第三方库

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

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

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

希望这可以帮助。

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

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

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

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

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

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

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