私は Java Multimedia IO Project に取り組んでいますが、DWORD を書き込もうとすると、4 バイトではなく 16 バイトになるという問題が発生しました。次のコードを使用して、4 文字の文字列を 16 ビットのリトルエンディアン バイト配列に変換しています。
word.getBytes("UTF-32LE")
配列が 4 バイトよりも長い理由を教えてください。
ありがとう、リアム。
1 文字あたり 4 バイトの形式 (UTF-32) にエンコードしているため、こちらの説明を参照してください
文字あたりのバイト数にしたい場合は、「UTF-32LE」の代わりに「UTF-8」を使用してください
OK、デバッグを行ったところ、「word.getBytes("UTF-32LE")」から直接バイトを書き込んでいるときに、余分な 12 バイトが追加されていることがわかりました。
私がそうするなら、"RIFF".getBytes("UTF-32LE")
私R000I000F000F000
はファイルに入るので、次のコードを使用してそれらのゼロを削除しました。
byte[] bits = word.getBytes("UTF-32LE");
byte[] dword = new byte[4];
System.arraycopy(bits, 0, dword, 0, 1);
System.arraycopy(bits, 4, dword, 1, 1);
System.arraycopy(bits, 8, dword, 2, 1);
System.arraycopy(bits, 12, dword, 3, 1);
write(dword);
私が得ていた問題がバグだったのか、それともそれが返されたのかはわかりません。