protobuf怎么处理java中的Object和Object[],protobuf的bytestring和object[]
如题,作者一开始也遇到了这个比较棘手的问题。
话不多说,直接说解决方案。
这里使用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数组不一定符合对象输入流的规则,也就不能解析出对象了。(就是流中的一些前缀)
如果有帮助劳烦点个赞~
protobuf怎么处理java中的Object和Object[],protobuf的bytestring和object[]的更多相关文章
- Java中泛型Class<T>、T与Class<?>、 Object类和Class类、 object.getClass()和Object.class
一.区别 单独的T 代表一个类型(表现形式是一个类名而已) ,而 Class<T>代表这个类型所对应的类(又可以称做类实例.类类型.字节码文件), Class<?>表示类型不确 ...
- java中的类型安全问题-Type safety: Unchecked cast from Object to ...
首先,java语言室类型安全的,通常我们遇到这个问题是出现在Object转化为目标类型时, 这个转化并不是安全的.这个问题普遍认为因为使用了jdk1.5或者1.6的泛型, request.getAtt ...
- 浅谈java中的祖先类Object
首先一道题: public class User{ private String name; private int age; public String getName() { return nam ...
- Java中到底有没有指针;同时注意引用和指针的区别
Java中引用的作用类似于指针,但是有区别:() (1) 指针必然指向一个内存地址,如果你定义的时候不指定,就会乱指(很可能造成安全隐患)但是引用定义出来后默认指向为空. (2) 指针可 ...
- java中synchronized的使用方法与具体解释
Java语言的keyword.当它用来修饰一个方法或者一个代码块的时候,可以保证在同一时刻最多仅仅有一个线程运行该段代码. 一.当两个并发线程訪问同一个对象object中的这个synchronized ...
- Java中的一个类型转换问题
一.Object转Integer Java中hibernate或者ResultSetHandler查询sql语句, 返回的object类型其实是Long类型, 而不是Integer类型, 因此此时直接 ...
- java中的dao模式
java中Dao模式 什么是DAO 1.Data Access Object(数据存取对象) 2.位于业务逻辑和持久化数据之间 3.实现对持久化数据的访问 DAO模式的作用 1隔离业务逻辑代码 ...
- java中equals和hashCode方法随笔二
前几天看了篇关于java中equals和hashCode方法的解析 1.Object类中的equals方法和hashCode方法. Object类中的equals和hashCode方法简单明了,所有的 ...
- Java中的java.lang.Class API 详解
且将新火试新茶,诗酒趁年华. 概述 Class是一个位于java.lang包下面的一个类,在Java中每个类实例都有对应的Class对象.类对象是由Java虚拟机(JVM)自动构造的. Class类的 ...
- Java中 equals和==的区分, new Integer和 非new的区别
浅谈 equals 和 == ,new出的Integer和非new出的Integer 首先我们要知道在 == 比较的是内存地址值(不包括8种基本数据类型) equals比较的是两个值(内容)是否相同. ...
随机推荐
- Flink写入Redis集群 重写flink-connector-redis包,解决Cluster无法输入密码问题
起因:使用flink的时候难免和redis打交道,相信大家都使用过flink-connector-redis来处理,但是当我想要使用RedisSink写入集群时,发现居然不支持使用密码,于是有了这篇笔 ...
- Linux7重置root管理员密码
1.先确定是否为rhel 7系统(别的系统我没有试过,请慎重尝试) cat /etc/redhat-release 查看Linux的操作系统 2.按键盘e键进入内核编辑界面 3.找到linux16这行 ...
- Django和DRF的区别
Django和DRF的区别 一.Django REST Framwork 和 Django 1.两者的概念: Django REST Framwork: 将数据库的东西通过ORM的映射取出来,通过vi ...
- ES6新增运算符 ?? || &&
运算符(?? || &&) && 与运算符 &&左边表达式为真时执行右边表达式 let a = true let b = 0 a && ...
- 2022-3-8内部群每日三题-清辉PMP
1.实践敏捷方法的开发负责人被任命为一个项目的迭代经理,该负责人与使用瀑布式方法的业务分析师密切合作,但这两个方法的差异已经开始对团队绩效产生负面影响,项目经理分别与开发负责人和业务分析师就这种情况进 ...
- mysql数据库常用指令
1.查询当前连接数据库别名 select database(); Current database 项显示当前连接的数据库 2.查询数据表中当天的数据 select * from 表名 WHERE T ...
- 「SOL」序列 (LOJ/NOI2019)
准备写新博客的时候发现自己草稿箱里还有一篇咕了十几天的题解 思路挂在了费用流之前-- 题面 > Link LOJ #3158 解析 这道题的本质是一个二分图带权匹配的问题,一个经典的做法是直接做 ...
- Qt ui 文件转换为python代码文件
python -m PyQt5.uic.pyuic -o ui_xxx.py xxx.ui
- Delphi7_VCL线程的使用(一)
1.TThread类的属性 (1)FreeOnTerminate属性 该属性用于指定当前的线程终止时是否自动删除线程对象.默认值为true. 语法: 1 Property FreeOnTerminat ...
- django前后端分离接口开发
用django进行接口开发 接口: /api/parameter (同一个接口地址实现不同的请求方式) 全局参数(get,post,put,delete) GET:获取全局参数的所有数据 POST:创 ...