干净的方法将一个短整数附加到CodedOutputStream

时间:2012-05-03 11:36:57

标签: java protocol-buffers

我正在使用谷歌协议缓冲区,我需要将我的消息的前缀作为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())

这是正确的方法吗? (说实话,它感觉不对)

谢谢

1 个答案:

答案 0 :(得分:1)

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

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

虽然这不会检查溢出。