将java readLine()能够读取1GB行

时间:2015-01-07 09:27:13

标签: java string file-io bufferedreader

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

1 个答案:

答案 0 :(得分:6)

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

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

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

注意:

String存储字符而不是字节符合您的意愿,因此数组限制适用于字符数,这些字符数可能甚至超过字节数,具体取决于所使用的字符编码和实际文本内容(例如,如果使用UTF-8编码,则字符甚至可以编码为4个字节的数据)。