java - bufferedreader - 读入 stringbuffer 而不是 string

标签 java stream while-loop bufferedreader stringbuffer

我有以下代码。我想做的是将 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/

相关文章:

java - 将视频缩放至 24x15 分辨率

java - 正则表达式java从字符串中提取余额

java - 为什么这个 SQL 语句会导致错误?

java - 你可以用什么方法创建一个字符串 2000 "spaces"

node.js - 使用 socket.io 流式传输网络摄像头

c++ - 非终止 while 循环

ios - 更改swift4中while循环的声音文件

flutter - 如何从Firestore制作父/子对象流

PHP Lame 流过滤器

Javascript iMacros 嵌套 while 循环(宏中的两个循环)