我使用的是Google协议缓冲区,我需要给消息加上16位int大小的前缀。
我没有找到写16位int的协议缓冲区方法
我是一个c ++的人,对Java几乎一无所知。
到目前为止,我正在使用:
// protomessage is a protocol buffer message
// assuming protomessage.toByteArray().length < short.MAX_value
ByteArrayOutputStream rawOutput = new ByteArrayOutputStream();
CodedOutputStream output = CodedOutputStream.newInstance(rawOutput);
ByteBuffer b = ByteBuffer.allocate(2);
b.order(ByteOrder.LITTLE_ENDIAN);
b.putShort((short) (protomessage.toByteArray().length));
output.writeRawBytes(b.array())
那是正确的方法吗? (老实说,感觉不对)
谢谢
最佳答案
只要知道确实需要两个字节,就可以直接执行此操作:
int len = protomessage.toByteArray().length;
output.writeRawBytes(new Byte[]{
(byte) ((len >>> 8) & 0xff),
(byte) (len & 0xff)
});
虽然这不会检查溢出。