• このエントリーをはてなブックマークに追加

スポンサードリンク

はじめに

Java で byte 型を扱う方法を調べてみたのでまとめてみる.

ByteBuffer クラスをつかう

ByteBuffer クラスを利用すると, byte 型に対するいろいろな操作が簡単にできる.

他のプリミティブ型から byte 型配列 に変換

手順は以下.

  1. ByteBuffer.allocate (size) でメモリ獲得.
  2. putXXX メソッドで獲得したメモリに値を挿入
  3. array () で byte 配列に変換
  ByteBuffer buffer = ByteBuffer.allocate (arraySize);
  buffer = buffer.putXXXX (value)
  byte[] bytes = buffer.array ();

Sample

import java.nio.ByteBuffer;

class ByteSample {
	
	public static void main (String args[]) {
		showBytes (short2Byte ((short) 10));
		showBytes (int2Byte (10));		
		showBytes (int2ByteN (10));
		showBytes (long2Byte (10L));		
	}

	public static byte[] short2Byte (short value) {
		return ByteBuffer.allocate (Short.SIZE/Byte.SIZE).putShort (value).array ();
	}

	public static byte[] int2Byte (int value) {
		return ByteBuffer.allocate (Integer.SIZE/Byte.SIZE).putInt (value).array ();
	}

	public static byte[] long2Byte (long value) {
		return ByteBuffer.allocate (Long.SIZE/Byte.SIZE).putLong (value).array ();
	}
	
	static void showBytes (byte[] bytes) {
		for (int i=0; i < bytes.length; i++)
			System.out.printf (Integer.toHexString (bytes[i] &0xff));			
		System.out.println ("");
	}
}

出力結果

0a
000a
0000000a

エンディアン対応

ByteBuffer の初期順序は, BIG_ENDIAN.

  • ビッグエンディアン

複数バイトのデータを上位バイトから順番に格納する方式です. 0x1234ABCD を 0x12,0x34,0xAB,0xCD という順番で保存します.

  • リトルエンディアン

複数バイトのデータを下位バイトから順番に格納する方式です. 0x1234ABCD を 0xCD,0xAB,0x34,0x12 という順番で保存します.

リトルエンディアン (ネットワークバイトオーダー) に対応するためには, java.nio.ByteOrder クラスと order メソッドを利用する.

	public static byte[] int2ByteN (int value) {
		ByteBuffer byteBuffer = ByteBuffer.allocate (Integer.SIZE/Byte.SIZE);
		byteBuffer.order (ByteOrder.LITTLE_ENDIAN);
		byteBuffer.putInt (value);
		return byteBuffer.array ();
	}