【问题标题】:will java readLine() be able to read 1GB linejava readLine() 是否能够读取 1GB 行
【发布时间】:2015-03-05 03:40:09
【问题描述】:

BufferedReader#readLine() 尝试用 8192 字节填充其缓冲区。如果行本身的大小比这大得多,它会抛出异常还是分块读取并打印整行?

【问题讨论】:

  • 1 GB 行?它是像一个超长的、缩小的 CSS 文件还是什么?
  • 为什么不试试调试呢?
  • 你应该用适当的大小初始化你的BufferedReader
  • @jyoon 1GB CSS 文件?如果相应的网站的样式表有那么大,它一定看起来真的不错。
  • @Tom,它也可以是一个缩小的 JS 文件。尽管如此,它背后的质量仍然令人惊叹。

标签: java string file-io bufferedreader


【解决方案1】:

BufferedReader.readLine() 被声明返回一个String,它可以是 1 GB 长。 String 在其内部表示中是 char[],Java 中数组的长度可以远大于 10^9(数组的最大大小略小于 Integer.MAX_VALUE)。

BufferedReader.readLine() 的实现使用了 StringBuffer,它还在 char 数组中构建了 String,因此也不会阻止该行的长度为 1GB。

BufferedReader 的内部缓冲区不限制最大行大小,它只是用于加速某些操作并支持Reader.mark()Reader.reset() 操作。

注意:

String 存储字符而不是字节对您有利,因此数组限制适用于字符数,根据使用的字符编码和实际文本内容(例如例如如果使用 UTF-8 编码,一个字符甚至可能被编码为 4 个字节的数据)。

【讨论】:

    猜你喜欢
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    相关资源
    最近更新 更多