如何使用 Protocol Buffers 序列化内存中的数据?
How to use Protocol Buffers Serialised Data in memory?
考虑以下代码片段。
DynamicMessage message; // somehow I created the message
// Writing directly to file
message.writeTo(new FileOutputStream("out.ser"));
// Wrinting through other stream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
message.writeTo(baos);
BufferedWriter writer = new BufferedWriter(new FileWriter("out2.ser"));
writer.write(baos.toString());
writer.flush();
writer.close();
现在,如果我尝试使用
解析相同的文件
DynamicMessage message2 = DynamicMessage.parsefrom(descriptor, "out.ser"); // Works
DynamicMessage message3 = DynamicMessage.parsefrom(descriptor, "out2.ser"); // Doesn't Work
我认为 .toString()
方法已经改变了编码(可能)。任何人都可以建议一种将 message.writeTo()
序列化为字符串的方法(应该能够再次解析)。
无法写入 "out2.ser",因为您正在执行 baos.toString()
。
protobuf 的内容必须保存为字节数组。
修改以下代码块
ByteArrayOutputStream baos = new ByteArrayOutputStream();
message.writeTo(baos);
BufferedWriter writer = new BufferedWriter(new FileWriter("out2.ser"));
writer.write(baos.toString());
作为
FileOutputStream f = new FileOutputStream("out2.ser");
message.writeTo(f);
考虑以下代码片段。
DynamicMessage message; // somehow I created the message
// Writing directly to file
message.writeTo(new FileOutputStream("out.ser"));
// Wrinting through other stream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
message.writeTo(baos);
BufferedWriter writer = new BufferedWriter(new FileWriter("out2.ser"));
writer.write(baos.toString());
writer.flush();
writer.close();
现在,如果我尝试使用
解析相同的文件DynamicMessage message2 = DynamicMessage.parsefrom(descriptor, "out.ser"); // Works
DynamicMessage message3 = DynamicMessage.parsefrom(descriptor, "out2.ser"); // Doesn't Work
我认为 .toString()
方法已经改变了编码(可能)。任何人都可以建议一种将 message.writeTo()
序列化为字符串的方法(应该能够再次解析)。
无法写入 "out2.ser",因为您正在执行 baos.toString()
。
protobuf 的内容必须保存为字节数组。
修改以下代码块
ByteArrayOutputStream baos = new ByteArrayOutputStream();
message.writeTo(baos);
BufferedWriter writer = new BufferedWriter(new FileWriter("out2.ser"));
writer.write(baos.toString());
作为
FileOutputStream f = new FileOutputStream("out2.ser");
message.writeTo(f);