2012-05-03 8 views
1

私はGoogleプロトコルバッファを使用しています。私のメッセージに16ビット整数としてサイズを付ける必要があります。 16ビットのintを書き込むプロトコルバッファメソッドが見つかりませんでしたCodedOutputStreamに短い整数を追加するためのきれいな方法

私はJavaの知識がほとんどなく、C++の人です。

  // 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()) 

が正しい方法ということです:

これまでのところ、私は使ってそうするのですか?

を(正直それが右に感じるdoesntの)あなたが直接あなたが正確に2つのバイトが必要とされている知っている与えられ、それを行うことができ

答えて

1

ありがとう:

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

これはオーバーフローをチェックしませんが。

+0

私はこの回答を受け入れるでしょう、あなたの解決策を私の上にお勧めしますか?または両方とも問題ありませんか? – Pierre

+0

鉱山はおそらく速いですが、あなたのものはいくらか読みやすくなります。また私は私のデバッグしていない:-) – artbristol

関連する問題