我们有一些 Java 代码,通过使用 BufferedReader.readline()
循环读取文件中的每一行来处理用户提供的文件。
问题是,当用户上传行数极长的文件(例如任意二进制 JPG 等)时,可能会导致内存不足问题。即使第一个 readline() 也可能不会返回。 我们希望在 OOM 之前拒绝长行文件。
是否有一个标准的 Java 习惯用法来处理这个问题,或者我们只是更改为 read()
并编写我们自己的安全版本的 readLine()
?
最佳答案
您需要自己逐个字符(或逐 block )读取文件(通过某种形式的 read()),然后在遇到换行符时将行形成字符串。这样,如果在遇到换行符之前达到了最大字符数,您可以抛出异常(避免 OOM 错误)。
如果您使用 Reader 实例,那么实现此代码应该不会太困难,只需从 Reader 读取到缓冲区(分配给最大可能的行长度),然后在遇到问题时将缓冲区转换为 String换行符(如果不这样做则抛出异常)。
关于java - 如何安全地读取可能是二进制的文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625905/