我有以下代码。我想做的是将 BufferedReader 中的每一行直接读入 StringBuffer 以减少内存开销。一旦它到达数据流的末尾,我希望它退出 while 循环。
StringBuffer line = new StringBuffer();
URL url = new URL("a url");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
int count = 0;
while(line.append(reader.readLine()) != null){
System.out.println(line.toString());
line.delete(0,line.length());
}
它可以很好地读取流,但是当我到达流的末尾时,它返回 null 并在不退出循环的情况下继续打印 null。任何
最佳答案
这个 while(line.append(reader.readLine()) != null)
基本上和说 while(line.append(reader.readLine()).toString () != null)
这永远不可能发生。
您可能遇到的另一个问题是,null
实际上被翻译成 "null"
的文字 String
。这就是它打印“null”的原因,该值实际上不是 null
- 还很困惑......
相反,尝试类似...
String text = null;
while((text = reader.readLine()) != null){
line.append(text)
System.out.println(line.toString());
line.delete(0,line.length());
}
已更新
虽然我在这里,但我可能会建议您实际上并没有为自己保存任何东西。
readLine
将创建 String
对象,您将其放入 StringBuffer
中。您实际上并没有节省任何内存,而是使过程复杂化。
如果您真的担心在内存中创建大量 String
对象,请改用 BufferedReader#read(char[])
。将生成的字符数组附加到 StringBuffer
。
此外,除非您需要同步访问 StringBuffer
,否则请改用 StringBuilder
,它会更快。
关于java - bufferedreader - 读入 stringbuffer 而不是 string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14637463/