java - 如何安全地读取可能是二进制的文本文件?

标签 java out-of-memory

我们有一些 Java 代码,通过使用 BufferedReader.readline() 循环读取文件中的每一行来处理用户提供的文件

问题是,当用户上传行数极长的文件(例如任意二进制 JPG 等)时,可能会导致内存不足问题。即使第一个 readline() 也可能不会返回。 我们希望在 OOM 之前拒绝长行文件。

是否有一个标准的 Java 习惯用法来处理这个问题,或者我们只是更改为 read() 并编写我们自己的安全版本的 readLine()

最佳答案

您需要自己逐个字符(或逐 block )读取文件(通过某种形式的 read()),然后在遇到换行符时将行形成字符串。这样,如果在遇到换行符之前达到了最大字符数,您可以抛出异常(避免 OOM 错误)。

如果您使用 Reader 实例,那么实现此代码应该不会太困难,只需从 Reader 读取到缓冲区(分配给最大可能的行长度),然后在遇到问题时将缓冲区转换为 String换行符(如果不这样做则抛出异常)。

关于java - 如何安全地读取可能是二进制的文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625905/

相关文章:

tomcat - java.util.concurrent.ExecutionException : java. lang.OutOfMemoryError: tomcat 中的 PermGen 空间

java - Websphere 内存不足异常

java - jsp不合逻辑的错误

java - "The result set is closed"嵌套执行查询出错

java - 初学者套餐

java - 使用 MS Access 根据日期选择记录

Java 内存不足错误

haskell - 在 Haskell 的 ST Monad 中高效记录字符串数据

java - 为什么 Java 允许捕获应用程序不应该处理的错误类型?

java - 在 im4java 中打开 SWT 图像