我不明白为什么第一个变种正在起作用,第二个变种不起作用。
BufferedReader reader = new BufferedReader(new InputStreamReader(in, charsetName));
try {
char[] buffer = new char[4096];
reader.read(buffer, 0, 4096);
return new String(buffer);
} finally {
reader.close();
}
BufferedReader reader = new BufferedReader(new InputStreamReader(in, charsetName));
try {
int size = 0;
int ch=0;
while ((ch=reader.read())!=-1){
size++;
}
char[] buffer = new char[size];
reader.read(buffer, 0, size);
return new String(buffer);
} finally {
reader.close();
}
答案 0 :(得分:3)
首先,两个的代码段都被破坏了。您没有注意到返回值,而是在调用read
。可能有更多的数据需要读取,并且很可能没有填充缓冲区......但是你仍然使用整个缓冲区。
接下来,您的第二段代码正在阅读内容的结尾...然后尝试阅读更多内容。那不行。
我强烈建议您自己放弃这样做,并使用来自Files.toString(File, Charset)
的Guava之类的内容。这里没有必要重新发明轮子,如果 希望重新发明它,你需要改变很多代码。 (我可能从头开始......)
答案 1 :(得分:1)
BufferedReader
在文件中使用一种指针来定位他应该读取的位置,只要我们调用read(*)方法,这个指针就会改变。所以在你的情况下,第二个想要什么都不读,因为指针已到达文件的末尾。