将巨大的文件转换为Java中的编码字符串,而不会出现内存不足的异常



我想将巨大的文件转换为Java中的编码字符串,而没有任何内存不足的异常。请告诉我最好的解决办法。

一个java.lang。在java中,字符串在内存中。你想要的是完全不可能的。编程并没有那么简单。你的选择是:

  1. 流式传输文件。例如,在块中处理文件;确保您的代码既不需要String,也不需要查看文件中任何特定索引的能力,也不需要向前看或向后看。

  2. 流和块的组合:继续从文件中读取数据,直到您看到一些分隔块或其他指示,您有一个数据块,然后处理块,并继续。确保输入没有任何巨大的块(或者定义一个块永远不会超过一些可管理的量),然后处理块,而不考虑以前或将来的块。

  3. 使用RandomAccessFile,但这需要你知道你正在寻找的块的确切位置。这相当复杂。

  4. 忘掉这一切,将文件转储到数据库中,并与数据库交互。

'我只想要一个包含这个10GB文件内容的字符串,而不占用10GB内存'是不可能的.

您可以尝试压缩到byte[]。使用new GZipOutputStream(new ByteArrayOutputStream())。如果数据可以被压缩(并且不是已经压缩的视频之类的),那么它可能会工作。

使用String是一个坏主意,因为总是完成Charset转换,并且字符串操作可能调用char[],char是2字节。你可以试试StandardCharsets。ISO_8859_1,单字节编码。通常会将字节编码为Base64 ASCII,但这再次将数据扩大33%。

试试不一样的

最新更新