byte配列の値を確認する

・他システムとの連携でbyte配列でデータを受信し、受信した値をHexDecimalとDecimalで出力して確認したい場合
【例】各1バイトに数値が設定されていて、3バイトで西暦の「yyMMdd」を表現している場合
(2018年10月31日)の場合「181031」がbyte配列として以下のようになっているはず

2進 16進 10進
0001_0010 12 18
0000_1010 0A 10
0001_1111 1F 31
  • 各バイトを、HexDecimalとDecimalに変換して出力

JavaSE8でのStreamクラスを使って実装したかったのですが、Streamって使えない?

        byte[] bytes = {0b0001_0010, 0b0000_1010, 0b0001_1111};
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();
        for (byte b : bytes) {
            String val = String.format("%02X", b); // HexDecimal
            sb1.append(val);
            int i = Integer.parseUnsignedInt(val, 16); // Decimal
            sb2.append(i);
        }
        System.out.println(String.format("HexDecimal:%s", sb1.toString()));
        System.out.println(String.format("   Decimal:%s", sb2.toString()));
    }

実行結果

HexDecimal:120A1F
   Decimal:181031
        // JDK8
        Stream<Integer> si = Stream.of(1,2);
        Stream<Byte> sb = Stream.of(0b0000_0001, 0b0000_0002); // <-ここでコンパイルエラー

エラーのメッセージがなんだかわかりにくいです、、、

Java難しいです、、、
追記(上記実装で2進数なのに2としていたのを修正、汗、、、)

        Stream<Integer> si = Stream.of(1,2);
        Stream<Byte> sb = Stream.of(0b0000_0001, 0b0000_0010);


追記2
@さんからbyteにキャストすればいいと教えていただいたので、早速実装修正
コンパイルエラーが解決できました!ありがとうございます!!!

        Stream<Byte> sb = Stream.of((byte)0b0000_0001, (byte)0b0000_0010);
        String HexDecimalVal = sb.map(b -> String.format("%02X", b)).collect(Collectors.joining());
        System.out.println(HexDecimalVal);

実行結果

0102

Java実装、楽しいです。