我正在使用谷歌协议缓冲区,我需要将我的消息的前缀作为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())
这是正确的方法吗? (说实话,它感觉不对)
谢谢
答案 0 :(得分:1)
如果您确切知道需要两个字节,则可以直接执行此操作:
int len = protomessage.toByteArray().length;
output.writeRawBytes(new Byte[]{
(byte) ((len >>> 8) & 0xff),
(byte) (len & 0xff)
});
虽然这不会检查溢出。