これを行う必要はありません。次を使用できますByteBuffer
。
int i = ByteBuffer.wrap(rdbuf).order(ByteOrder.LITTLE_ENDIAN).getInt();
読み取る int が多数ある場合、コードは次のようになります。
ByteBuffer buf = ByteBuffer.wrap(rdbuf).order(ByteOrder.LITTLE_ENDIAN);
while (buf.remaining() >= 4) // at least four bytes
i = bb.getInt();
ここにJavadocがあります。バイナリ データを処理する必要があるあらゆる状況での使用をお勧めします (そのようなデータの読み取りまたは書き込みに関係なく)。リトル エンディアン、ビッグ エンディアン、さらにはネイティブの順序付けを行うことができます。(注: デフォルトではビッグエンディアン)。
(編集: @PeterLawrey は、これがリトル エンディアン データ、固定コード抽出のように見えることを正しく述べています。また、ファイルの内容を に直接ラップする方法については、彼の回答を参照してくださいByteBuffer
)
ノート:
ByteOrder
と呼ばれる静的メソッドが.nativeOrder()
あり、基礎となるアーキテクチャで使用されるバイト順を返します。
- a
ByteBuffer
にはオフセットが組み込まれています。現在のオフセットは、 を使用して照会したり、 を使用.position()
して変更したりできます.position(int)
。.remaining()
現在のオフセットから最後まで読み取るために残っているバイト数を返します。
- バッファーの現在のオフセットで読み取り/書き込みを行う相対メソッドと、指定したオフセットで読み取り/書き込みを行う絶対メソッドがあります。