【发布时间】:2016-10-17 18:58:51
【问题描述】:
我有一系列通过 DataOutputStream 将数据写入文件的对象。
随着我的应用程序文件格式的发展,我将向其中添加更多数据对象,这些数据对象应该能够被“旧”版本的应用程序读取。
为了能够做到这一点,我需要在对象数据前面加上一个大小值,指示当前对象将占用的字节数。
但是,由于这些数据可以是可变大小,特别是在处理字符串时,我无法事先知道大小。
有没有办法“预写”到字节缓冲区,就好像它是一个 DataOutputStream(特别是方法 - writeByte、writeShort、writeInt、writeUTF),这将使我能够获得在将数据写入 DataOutputStream 之前返回数据的字节长度?这样做可以让我跳过旧版本的应用程序确实理解的新数据对象。
【问题讨论】:
-
你是自己序列化对象,还是使用java内置的序列化?
-
您需要以二进制格式存储数据,还是可以将数据对象编组为文本,例如JSON 或 YAML 与 Jackson 之类的库?使用库进行繁重的工作时,反序列化也应该变得非常简单。
-
如果你自己序列化它,我使用this 技术来序列化字符串,但你也可以使用空终止
-
我自己在序列化对象。我没有使用任何形式的文本序列化。因此这是一种二进制格式,因此需要能够确定数据大小。
标签: java outputstream dataoutputstream