byteArrayの長さが20ではなく22なのはなぜですか?
質問
次のJavaコードを使用して、文字列から Byte []
への変換を試みます。
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16");
長さ22バイトのバイト配列を取得しましたが、このパディングがどこから来たかはわかりません。 長さ20の配列を取得するにはどうすればよいですか?
解決
Alexanderの答えは、なぜ存在するかを説明していますが、それを取り除きます。エンコード名に必要なエンディアンを指定するだけです:
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE
他のヒント
最初の2バイトはバイト順マークです。エンコードで使用される各16ビットワードのバイト順を指定します。
追加の2バイトが追加される場所を確認するために、16進数でバイトを印刷してみてください-開始または終了ですか?
最初にバイトオーダーマーカーが見つかることを選んでいます(0xFEFF )-これにより、バイト配列を消費する(受信する)誰でも、エンコードがリトルエンディアンかビッグエンディアンかを認識できます。
UTFの先頭には、このストリームが特定の形式でエンコードされていることを示すバイトオーダーマーカーがあります。他のユーザーが指摘したように、
最初のバイトは0XFE
2番目のバイトは0XFF
残りのバイトは
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57
所属していません StackOverflow