dap*_*hez 22 java readline bufferedreader
我使用BufferedReader的readLine()方法从套接字读取文本行.
没有明显的方法来限制读取行的长度.
我担心数据源可能(恶意地或错误地)写入大量数据而没有任何换行符,这将导致BufferedReader分配无限量的内存.
有没有办法避免这种情况?或者我必须实现readLine()自己的有界版本?
Ste*_*n C 12
最简单的方法是实现自己的有界线读取器.
或者更简单,重复使用代码这个BoundedBufferedReader类.
实际上,编码readLine()与标准方法相同的编码并非易事.处理3种线路终结器正确地需要一些非常仔细的编码.将上述链接的不同方法与Sun版本和Apache Harmony版本的BufferedReader 进行比较是很有趣的.
注意:我并不完全相信有界版本或Apache版本是100%正确的.有界版本假定底层流支持标记和重置,这当然不总是正确的.如果将Apache视为缓冲区中的最后一个字符,则Apache版本似乎预读一个字符.当读取用户输入的输入时,这将在MacOS上中断.Sun版本通过设置一个标志来处理这个问题,以便在下一个read...操作中跳过CR后导致可能的LF ; 即没有虚假的预读.
Kev*_*ack 11
另一个选择是Apache Commons的BoundedInputStream:
InputStream bounded = new BoundedInputStream(is, MAX_BYTE_COUNT);
BufferedReader reader = new BufferedReader(new InputStreamReader(bounded));
String line = reader.readLine();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29817 次 |
| 最近记录: |