我在手机上(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);
我主要想知道如果误用错误的文件读取器/写入器类,我可能会在读取或写入之前意外地将整个文件内容加载到内存中,
由于
答案 0 :(得分:0)
您可以尝试使用内存映射文件(java.nio.channels.FileChannel.map()
)。我不确定会为此分配多少堆空间。
答案 1 :(得分:0)
基本上你不想读取整个文件,只读取它的某个部分。在这种情况下,请改用java.io.RandomAccessFile:
我的词典应用程序使用RandomAccessFile来访问大约45MB的数据,当每个Android应用程序只能使用16MB的RAM时,运行我的字典引擎的服务在相同的45MB数据上运行仅使用大约2MB的RAM(并且大多数它的概率被Davlik VM使用而不是我的搜索引擎)。所以这个课程绝对有效。