1) 一个非序列化的Java对象能否被发送到网络上由另一个JVM执行或存储在本地文件中以恢复数据? 2) 序列化和存储Java对象与存储未序列化的Java对象有何区别?
1) 一个非序列化的Java对象能否被发送到网络上由另一个JVM执行或存储在本地文件中以恢复数据? 2) 序列化和存储Java对象与存储未序列化的Java对象有何区别?
序列化是将 Java 对象表示为一系列字节的方法,它只是一种格式,仅此而已。
"内置"的 Java 序列化是一个类,提供了一个 API 来将 Java 对象转换为一系列字节。这就是全部。当然,反序列化是一种 "补充" 过程,允许将这个二进制流转换回对象。
序列化/反序列化本身与 "通过网络发送" 没有任何关系。只是方便地发送可以从对象使用序列化创建的二进制流。
更甚者,有时候内置的序列化不是获取二进制流的最佳方式,因为有时候可以使用更少的字节来转换对象。
因此,您可以使用自定义协议,为序列化提供自己的定制(例如 Externalizable),或者甚至使用第三方库,如 Apache Avro。
我认为这有效地回答了你们的两个问题:
如果您想要将非序列化对象(我猜测是那些没有实现 "Serializable" 接口的对象)转换为字节流并通过网络发送,存储在二进制文件中等等,您可以自己完成。当然,您需要了解如何读取这种二进制格式以进行转换。
由于序列化只是一种转换协议而不是“与存储相关的事情”,答案是显而易见的。
希望这能有所帮助。
1) 一个非序列化的Java对象能否通过网络发送到另一个JVM执行或存储在本地文件系统中以恢复数据?
使用ObjectOutputStream对对象进行编组,以便通过网络发送。序列化是一种Java标准方式,用于存储对象的状态。您可以自己设计做同样的事情,但除非您在标准方式中看到了大问题,否则没有重新发明轮子的必要。
2) 序列化和存储Java对象与存储未序列化Java对象之间有什么区别?
序列化使用ObjectOuputStream存储对象的状态,并可以使用ObjectInputStream进行反序列化。序列化的对象可以保存到文件中,也可以通过网络发送。序列化是实现所有这些的标准方式。但是,如果您真的有一个要点,您总是可以发明自己的方法来实现。