BufferedReader#readLine()尝试用8192字节填充其缓冲区。如果行本身的大小比它大得多,它会抛出异常还是以块的形式读取并打印整行?
答案 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个字节的数据)。