3

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

4

4 回答 4

4

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

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

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

所以你可以使用你自定义的协议,提供你自己的序列化定制(例如,Externalizable

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

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

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

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

希望这可以帮助。

于 2013-09-29T05:57:25.320 回答
1

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

编辑: ObjectOutputStream 和 ObjectInputStream 可以编写原语以及可序列化的对象,如果那是你正在使用的。

于 2013-09-29T05:51:08.877 回答
1

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

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

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

序列化使用 ObjectOutputStream 存储对象的状态,并且可以使用 ObjectInputStream 进行反序列化。序列化的对象可以保存到文件中,也可以通过网络发送。序列化是实现这一切的标准方式。但是,如果您真的有必要,您总是可以发明自己的方法来做到这一点。

于 2013-09-29T05:53:57.033 回答
1

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

于 2013-09-29T05:55:25.247 回答