大きな文字列 (60MB 程度)の場合、ファイルの末尾にFileWriter
余分なnull
s が追加されます。小さな文字列の場合、このコードは期待どおりに機能します。
わかりやすくするために、dat と filePath は文字列です。
FileWriter fstream = new FileWriter( filePath );
fstream.write( dat );
fstream.close();
File f = new File( filePath );
System.out.println("Data: " + dat.length() + ", File: " + f.length());
要するに、どのような状況で、2 つの出力値が異なる必要があるのでしょうか?
これが私の出力例です:
Data: 63833144, File: 63833728
null
何らかの理由で、ファイルの最後に584 個の余分なs があります。文字列が過剰に割り当てられている可能性があることは合理的だと思いますが、これらはファイルに出力されるべきではありませんよね? さらに悪いことに、明示的に長さを指定すると、次のようになります。
fstream.write(dat, 0, dat.length());
動作は同じです。偶然にも、(dat.length() - 584) と言うと、それは私が望むことを行いますが、この特定のケースでのみです。
何か案は?
JDK バージョン: 1.7.0_02
編集:変数のファイルタイプを追加(両方の文字列)