Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Streamについて

javaでのファイルコピーについてInputStreamReaderから
InputStreamWriterに流してやる際にごく稀にですが正確に
読み込めず入力ファイルと出力ファイルで差異が発生してしまう。

1000のファイルで数ファイルのみ発生。

・readにて単一で読み込んでwriteしてるだけ。
※但し、毎回ではなくごくまれにだけ。ファイルに対するアクセスは1プロセス内の1スレッドのみ。

結局、原因がわからないのでFileChannelにてtranferでの方法に
切り替えました。
※こちらでは発生しない。

似たような現象が発生した人や原因を知ってる方が居ましたら
教えてください。

5

回答

4820

閲覧

5件の回答

評価

0

バージョン/リビジョン関係なく?
個人的には、そういう状況に遭遇したことはないな。

評価

0

$さん、ご回答ありがとうございます。

はい。特にバージョンやリビジョンも関係ないです。

また特定のファイルってわけでもないです。

環境に依存するかもと思い、簡単ではありますがXPと7にても試しましたが
結果は同じでした。

ただ、調べてみるとreadには今までもBUGがかなりあったみたいなので最
悪、Oracleに問い合わせてみます

評価

0

@

たぶん、書いているコードに問題があるだけでしょう。

なぜ、ファイルコピーにReader/Writerを使っているのでしょう。なぜ、それをFileChannelに置き換えることができたのでしょう。FileChannelに置き換えることができるファイルコピー(バイト列の複製)であれば、Reader/WriterではなくInputStream/OutputStreamを使うはず。

ファイルに文字としては不適切なバイト列が含まれていた可能性があると思います。

評価

0

なるほどね。
たしかに指定した文字コードでマッピングされていないorUTF16と方向によってマ
ッピングが異なるバイト列なら、そのまま読んで書いてるつもりでも変わるな。

評価

0

なるほど…

文字コードやエンディアンによるところは盲点でした。
ということはreadで処理するならbyte配列などで
処理する&エンディアンなども意識する必要があると
いうことですね…
※Cのときにも同じことで悩んだ記憶がありました…

ご回答ありがとうございました!

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。