如题,作者一开始也遇到了这个比较棘手的问题。
话不多说,直接说解决方案。
这里使用bytestring,如果是object[]的话则用repeated定义即可。
那么问题又来了,用这个类型怎么做到与java中的object完全转换呢?
目前,作者发现bytestring对于java的object没有现成的序列化和反序列化方案,so直接用java中的对象输入流。
代码示例如下:
Object[] objects = new Object[]{\"string\", 9, \'%\', 3.2f, true, 5.1d, false};
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(objects);
byte[] byteArray = bos.toByteArray();
//ByteString bytes = ByteString.copyFrom(byteArray); //protobuf的包
//反序列化由bytestring转为object
//bytes.toByteArray(); //protobuf的包
ByteArrayInputStream byteInt = new ByteArrayInputStream(byteArray);
ObjectInputStream objInt = new ObjectInputStream(byteInt);
Object o = objInt.readObject();
System.out.println(o);
这里可以看到是可以序列化与反序列化的。需要注意的点是对象输入流需要的二进制要用对象输出流的byte数组。因为自定义的byte数组不一定符合对象输入流的规则,也就不能解析出对象了。(就是流中的一些前缀)
如果有帮助劳烦点个赞~
来源:https://www.cnblogs.com/bzdofj/p/16784756.html
本站部分图文来源于网络,如有侵权请联系删除。