Java 读/写大文件时尽可能少地使用内存的最佳方法?

Java 读/写大文件时尽可能少地使用内存的最佳方法?,java,android,Java,Android,我使用的是移动设备(android),有一个大约50mb的大文本文件。我希望能够打开文件并搜索到特定位置,然后从该位置开始将数据读入缓冲区。如果我想使用尽可能少的内存,那么使用FileReader+BufferedReader是最好的方法吗 BufferedReader in = new BufferedReader(new FileReader("foo.txt")); in.skip(byteCount); // in some cases I have to read from a

我使用的是移动设备(android),有一个大约50mb的大文本文件。我希望能够打开文件并搜索到特定位置,然后从该位置开始将数据读入缓冲区。如果我想使用尽可能少的内存,那么使用FileReader+BufferedReader是最好的方法吗

BufferedReader in
    = new BufferedReader(new FileReader("foo.txt"));
in.skip(byteCount); // in some cases I have to read from an offset
// start reading a line at a time here
我还需要写入文件,只需添加数据,因此:

FileWriter w = new FileWriter("foo.txt", true);
w.write(someCharacters);
我最感兴趣的是,如果误用了错误的文件读写器类,我可能会在读写之前意外地将整个文件内容加载到内存中


谢谢

您可以尝试使用内存映射文件()。但我不确定会为此分配多少堆空间。

基本上,您不想读取整个文件,而只想读取其中的某一部分。在这种情况下,请改用:

  • 它的方法保证执行seek而不是读取和丢弃(InputStream.skip()的一些实现实际上就是这样做的)
  • seek()方法可以向后移动文件指针,这是InputStream无法做到的
  • 提供了一种获取文件中当前位置的方法
  • 它只读取您告诉它读取的内容,因此不必担心您会意外加载超过您所需的内容

  • 我的字典应用程序使用RandomAccessFile访问大约45MB的数据,而每个Android应用程序只能使用16MB的内存,同时运行我的字典引擎的服务也只能使用大约2MB的内存(其中大部分是由Davlik VM使用的,而不是我的搜索引擎)。因此,本课程肯定能如期完成。

    只要确保只有在您认为需要时才决定将某些内容保留在内存中即可