我使用的是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)
     });


虽然这不会检查溢出。

10-07 15:13