對於大型字符串(大約60MB左右),FileWriter
會將額外的null
附加到我的文件末尾。對於小字符串,此代碼按預期工作。FileWriter在文件結尾處寫入額外的空值
爲了清楚起見,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());
總之,在什麼情況下,兩個印刷值應該不同?
這裏是我的示例輸出:
Data: 63833144, File: 63833728
我在文件末尾出於某種原因有584多null
秒。我覺得這個字符串可能已經被分配了,但是這些不應該被打印到文件中,對嗎?更糟的是,如果我明確地給它的長度:
fstream.write(dat, 0, dat.length());
行爲是一樣的。巧合的是,如果我說(dat.length() - 584),它做我想要的,但只在這個特定的情況。
任何想法?
JDK版本:1.7.0_02
編輯:添加的文件類型變量(包括字符串)
'dat'是一個'String',是嗎?你的'String'是否包含任何特殊字符?你知道你正在比較字符串中字符串的長度和文件長度(以字節爲單位)嗎?不一定是一樣的。 –
@TomaszNurkiewicz我知道沒有Unicode編碼會在編碼字符串的末尾添加584個無關的空值。 – millimoose
'dat'是一個char []'數組嗎? –