JavaでOutputStreamへ書き込むときにゴミ(0x00)が入らないようにする方法

ヨメレバCSS
オリジナルCSS


※本サイトはアフィリエイトプログラムによる収益を得ています。
 ページ内のリンクがアフィリエイトリンクの場合があります。

 Javaのbyte配列の扱いでゴミが入るパターン。

スポンサーリンク
GoogleAdSence レクタングル(大)

OutputStreamに書き込むときにゴミが入ってしまう

 InputStreamから読み込むたびにOutputStreamに書き込むようなコードは、Javaではよくやると思います。

 ですがそのときに、書き込み範囲を指定しないとやはりbyte配列分の0x00が書き込まれてゴミになってしまう。

 例えばこういうコードです。

String input_file = "C:\\tmp\\input.dat";
String output_file = "C:\\tmp\\output.dat";
BufferedInputStream bis = new BufferedInputStream( new FileInputStream(input_file));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(output_file));
byte[] buf = new byte[1024];
while( bis.read(buf) != -1 ) {
    bos.write(buf);
}
bos.flush();

bis.close();
bos.close();

 C:\tmp\input.datは

abcde

だけの5バイトのファイルとします。

 これを実行するとC:\tmp\output.datが生成されますが、内容は「abcde」の後が0x00で埋められた、1024バイトのファイルになります。

必要な長さだけ書き込むようにする

 これもbyte配列ぶんだけ書き込まれてしまっているのが原因で、while文のところを次のように直すと解消されます。

int len = 0;
while( (len=bis.read(buf)) != -1) {
    bos.write(buf, 0, len);
}

 readで読み込んだ長さだけwriteで書き込むようにする、ということです。

スポンサーリンク
GoogleAdSence レクタングル(大)

シェアする

スポンサーリンク
GoogleAdSence レクタングル(大)