java - 如何确定我处于序列化 Java 对象的最后一个字节?

标签 java serialization

问题

序列化java对象中的终止字符/字节序列是什么(如果有的话)?

背景

我正在做一个小型的自学项目,我想序列化java对象并将它们写入一个流,在该流中读取然后反序列化。因为,我需要识别序列化对象之间的边界,并且无法确定当前对象不是最后一个对象,是否有一个始终存在的终止字符可以用作标识符?

我注意到有一个神奇的数字ACED可以让我识别对象的开始,那么我如何识别结束呢?

编辑: 如果没有终止字符,是否有任何安全终止字符/序列可供我使用(插入)来标识对象的结尾?

最佳答案

理论上你应该总是能够找到一个对象的末尾,但实际上你不能。我知道问题是自定义的 writeObject 实现不调用 defaultReadObjectreadFields 具有非标准表示形式。

我过去玩过序列化。包括创建流,以便在我对 ObjectInputStream 执行不寻常的操作时使用。这并不令人愉快(!)。

您可以阅读 spec 中的详细信息,并且源代码值得一读。

关于java - 如何确定我处于序列化 Java 对象的最后一个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/880457/

相关文章:

java - 在 jooq 中使用数组参数调用 postgres 函数

java - 如何修复 java.lang.UnsupportedClassVersionError : Unsupported major. 次要版本

java - 使用 System.out.println 输出后可以更改一行吗?

java - 如何使用 Jackson 递归地修改 JsonNode 的值

c# - 有什么方法可以对 List<T> 的子类进行 JSON.NET 序列化,该子类也具有额外的属性?

java - 如何构建包含文件和子目录的可序列化TreeModel?

java - Try catch 没有捕获错误的数字输入(还得到 java.lang.arithmatic 异常/零)

c# - 反序列化 JSON 时如何将 ObjectCreationHandling.Replace 应用于选定的属性?

java - 反序列化对象而无需访问Java中的类字节码

java - 如何发送未在 Thrift 中定义结构的 Java 对象