java - Java中整数和字节缓冲区到输出流的序列化

标签 java serialization

我有一个序列化代码,可以将对象序列化为字节缓冲区。我想首先将缓冲区的长度写入流,然后写入字节缓冲区本身。以下是我写入输出流的方式:

MyObject = new MyObject();
//fill in MyObject
...
DataOutputStream out = new DataOutputStream(new FileOutputStream("a.txt"));
ByteBuffer buffer = MySerializer.encode(myObject);
int length = buffer.remaining();
out.write(length);
WritableByteChannel channel = Channels.newChannel(out);
channel.write(buffer);
out.close();

我验证了这段代码,它似乎工作正常。但是当我尝试反序列化时,我无法正确执行。这是我的反序列化器代码片段:

DataInputStream in = new DataInputStream(new FileInputStream("a.txt"));
int objSize = in.readInt();
byte[] byteArray = new byte[objSize];
...

问题是没有从流中正确读取长度。
谁能帮我弄清楚我在这里缺少什么?

最佳答案

write 写入一个字节。 readInt 读取 4 个字节并将它们组合成一个 int

您可能想用 writeInt 写入长度(它将 int 分割成 4 个字节并写入)。

关于java - Java中整数和字节缓冲区到输出流的序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30495318/

相关文章:

java - 基于角色的 Spring Security 重定向不起作用

java - BlazeDS环境中的RemoteObject : Serializing objects from JAXB/XJC-generated classes

java - Android - 添加视频广告到应用程序

java - 通过套接字从 Objective-C 向 Java 发送数据

java - 延迟提交 cloudlet 任务

java - 为什么插入空 ArrayList 比插入非空 ArrayList 花费更多时间?

vb.net - 如何在 vb.net 中序列化和反序列化字典?

windows-phone-7 - 是否可以有不同的 IndependentStorageSettings.ApplicationSettings?

php - 为什么wordpress要序列化数据库中的数据?

C++:如何保存与平台无关的二进制文件?