首页 > 编程语言 >protobuf怎么处理java中的Object和Object[]

protobuf怎么处理java中的Object和Object[]

时间:2022-10-12 15:58:18浏览次数:35  
标签:object java protobuf Object new 序列化

如题,作者一开始也遇到了这个比较棘手的问题。

话不多说,直接说解决方案。

这里使用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数组不一定符合对象输入流的规则,也就不能解析出对象了。(就是流中的一些前缀)

如果有帮助劳烦点个赞~

 


 

 

 

标签:object,java,protobuf,Object,new,序列化
From: https://www.cnblogs.com/bzdofj/p/16784756.html

相关文章

  • java 易错点
    99%的Java程序员会踩的6个坑https://mp.weixin.qq.com/s/Y0F0i74kdSqn_XuZqu630w细数线程池的10个坑https://mp.weixin.qq.com/s/cDCHV08x1rPiZVZMRFjWBg......
  • JavaWeb学习日记 2022.10.10
    DDL操作表/查询表&创建表usetables;查询当前数据库下所有表名称showtables;查询表结构desc+表名称;创建表的基本语法createtable+表名(     字段......
  • 【Java】线程的生命周期
    1.线程的生命周期2.流程(1)新建Threadt1=newMyThread();此时线程状态为新建NEW(2)就绪t1.start();线程从NEW变为RUNNABLE状态,等待CPU调度执行权(3)运行获取CPU执行......
  • JavaScript字符串转数字的5种方法及其陷阱
    String转换为Number有很多种方式,我可以想到的有5种!parseInt(num);//默认方式(没有基数)parseInt(num,10);//传入基数(十位数)parseFloat(num);//浮点数Number......
  • 【Java】线程Thread类常用方法
    1.Thread类中常用方法Thread类常用方法描述start()启动当前线程,调用当前线程的run()方法。run()通常需要重写该方法,将线程要执行的操作写在此方法中。cu......
  • Java:锁定 Excel 中的特定单元格
    Excel文档在日常工作中应用广泛,常用于整理数据,收集信息等。在操作Excel文档时,有时我们会遇到需要锁定某一单元格的情况,例如,当我们通过共享的Excel文档收集整理某种信息时,锁......
  • 使用java代码连接oracle
    Connectionconn=null;try{Class.forName("oracle.jdbc.OracleDriver");//数据库IPStringip="oracle数据库IP地址或者是localhost";//数据库......
  • java字符串&字符串的使用&格式化字符串&正则&字符串生成器
    publicclassCompound{publicstaticvoidmain(Stringargs[]){Stringa="good";System.out.println(a);charb[]={'h','e','l','l',......
  • java流程控制
    publicclassCompound{publicstaticvoidmain(Stringargs[]){intx=10;intj=40;{inty=40;System.out.p......
  • 第一个java程序
    publicclassHelloJava{publicstaticvoidmain(String[]args){System.out.println("123123adasd");}}......