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());
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント