1

我正在使用 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())

那是正确的方法吗?(老实说感觉不对)

谢谢

4

1 回答 1

1

如果您确切知道需要两个字节,则可以直接执行此操作:

int len = protomessage.toByteArray().length;
output.writeRawBytes(new Byte[]{
        (byte) ((len >>> 8) & 0xff), 
        (byte) (len & 0xff)
     });

虽然这不会检查溢出。

于 2012-05-03T12:48:20.380 回答