1)是否可以通过网络发送非序列化的java对象,以便由另一个JVM执行或存储在本地文件存储中以恢复数据? 2)序列化和存储java对象与存储java对象而不序列化它有什么区别?
答案 0 :(得分:4)
序列化是一种将java对象表示为一系列字节的方法。它只是一种格式而已。 “内置”java序列化是一个类,它提供用于将java对象转换为一系列字节的API。而已。当然,反序列化是一个“补充”过程,允许将此二进制流转换回对象。
序列化/反序列化本身与“通过网络发送”事情无关。它只是方便发送一个二进制流,可以通过序列化从对象创建。
更有甚者,有时内置序列化不是获取二进制流的最佳方式,因为有时可以使用更少的字节来转换对象。
因此,您可以使用自定义协议,为序列化提供自己的自定义(例如,Externalizable)
甚至使用第三方库,例如Apache Avro
我认为这有效地回答了你的两个问题:
如果需要,您可以将非序列化对象(我猜是那个没有实现“Serializable”接口的对象)自行转换为字节序列(字节流),然后通过网络发送,存储在二进制文件中,无论如何。 当然,您必须了解如何阅读此二进制格式以进行转换。
由于序列化只是一种转换协议,而不是“存储相关的东西”,答案是显而易见的。
希望这有帮助。
答案 1 :(得分:1)
简而言之,您不会在java中存储非序列化对象。所以我对两个问题都说不。
编辑:ObjectOutputStream和ObjectInputStream可以编写基元和可序列化对象,如果这就是你正在使用的。
答案 2 :(得分:1)
1)可以通过网络发送非序列化的java对象 由另一个JVM执行或存储在本地文件存储中以获取 数据恢复?
使用ObjectOutputStream通过网络发送对象进行编组。序列化是存储对象状态的Java标准方法。你可以设计自己做同样的事情,但除非你以标准的方式看到一个大问题,否则没有必要重新发明轮子。
2)序列化和存储java之间有什么区别 对象vs存储java对象而不序列化它?
Serialization使用ObjectOuputStream存储对象的状态,并且可以使用ObjectInputStream对其进行反序列化。序列化对象可以保存到文件中,也可以通过网络发送。序列化是实现这一切的标准方法。但是,如果你真的有意义的话,你总能发明自己的方法。
答案 3 :(得分:1)
序列化的目的是以自包含的方式存储对象的状态,不需要原始内存引用,运行时状态等。换句话说,对象可以表示为可以存储的位串在磁盘上,通过网络发送等。