JavaのByteBufferでバイト配列を扱う方法

JavaのByteBufferでバイト配列を扱う方法

java.nio.ByteBufferクラスは使ったことがなかったのですが、電文で使う機会があったので纏めておきます。

Mapのインスタンスを文字列に変換してからバイト配列にします。

Map<String, Object> params = new HashMap<>();
params.put("key1", "val1");
params.put("key2", "val2");
ObjectMapper objectMapper = new ObjectMapper();
String str = objectMapper.writeValueAsString(vdParams);
System.out.println(str); // {"key1":"val1","key2":"val2"}
byte[] byteArr = objectMapper.writeValueAsString(vdParams).getBytes(); // Stringからバイト配列に変換

ByteBuffer.allocate()メソッドで容量確保してインスタンス生成

ByteBuffer.allocate()メソッドを使用して容量指定してインスタンス生成します。

以下では、64バイトのバッファを持つbuf変数を作成しています。

ByteBuffer buf = ByteBuffer.allocate(64);

変数に書き込むにはput()メソッドを使用します。引数にはbyte[]を指定します。

ByteBuffer buf = ByteBuffer.allocate(32);
ByteBuffer putBuf = buf.put("test".getBytes("UTF-8")); // testという文字のバイト配列を設定
byte[] byteArr = putBuf.array();
System.out.println(Hex.encodeHexString(byteArr));
System.out.println(byteArr.length);

org.apache.commons.codec.binary.Hex.encodeHexString()メソッドの引数にバイト配列を設定してString型の16進数文字列を返します。

出力すると以下のようになります。

7465737400000000000000000000000000000000000000000000000000000000

後ろにゼロ埋め(0x00)してくれます。固定長で扱うのに便利そうです。

Hex.encodeHexStringメソッド

org.apache.commons.codec.binary.Hex.encodeHexString()メソッドはバイト配列を16進数文字列に変換してくれます。

Hex.decodeHexメソッド

16進数表記の文字列をバイト配列に変換する場合は、org.apache.commons.codec.binary.Hex.decodeHexString()メソッドを使用します。

byte[] buf = Hex.decodeHex("1640000000".toCharArray());

コメント

タイトルとURLをコピーしました