【问题标题】:If my buffered reader is reading a line greater than 2 Mb, will it buffer the line or will the buffer size increase?如果我的缓冲阅读器正在读取大于 2 Mb 的行,它会缓冲该行还是缓冲区大小会增加?
【发布时间】:2014-05-28 04:41:57
【问题描述】:

我知道默认缓冲区大小是 2 Mb,这就是我正在使用的。

【问题讨论】:

  • 什么告诉你这是默认设置?
  • 上次我检查时,BufferedReader 的默认缓冲区大小是 8192 个字符(Java 6)。

标签: java bufferedreader


【解决方案1】:

两者都没有。缓冲区的大小不会改变流的外部行为(间接地,就它从底层流中读取的频率而言)。如果您尝试read 的数据多于缓冲区中的数据,它将耗尽缓冲区,然后直接从底层流中读取其余数据。如果你readLine 并且换行符不包含在缓冲区中,它会做同样的事情,将数据复制到输出直到它确实找到换行符,但对大小没有任何影响流自己的缓冲区。

顺便说一句,在我发现的任何实现中,默认缓冲区大小都不是 2MB。 classpath 使用 8kB,Oracle 似乎使用 4kB 或 8kB。

【讨论】:

    【解决方案2】:

    到目前为止,它使用内部StringBuffer 来保持组装线,它会根据需要增长。它不会增加读取缓冲区。

    【讨论】:

      【解决方案3】:

      BufferedReader 不一定是面向行的。在任何情况下,它都会读取 2Mb(如果这是缓冲区的大小)。

      【讨论】:

        猜你喜欢
        • 2020-06-30
        • 1970-01-01
        • 1970-01-01
        • 2019-08-06
        • 2020-09-05
        • 2016-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多