用Java从文件中读写字符串的绝对最快的方法是什么?



用Java从文件中读取和写入字符串的绝对最快的方式是什么?

我需要读取一个已知格式的文件到String[] —其中每行是数组—然后返回文件。

阅读尤其要尽可能快。

是否有更好的方法,然后只是使用BufferedReader和逐行读取到数组?

考虑使用Google protobuf

这是一个疯狂的想法:您可以在文件中写入每个字符串的长度。比如:

BufferedInputStream stream=new BufferedInputStream(new FileInputStream("file.bin"));
byte[] buff=new byte[256];
String[] result=new String[10];
for(int i=0;i<10;i++){
    int n=(reader.read()<<8)|reader.read();    // string length (assuming all strings are less than 64K)
    if(buff.length<n) buff=new byte[n];
    reader.read(buff,0,n);
    result[i]=new String(buff,0,n);
}
stream.close();

这将使BufferedReader免于检查n的每个输入字节。虽然我不确定这将比readLine()更快。

使用NIO和UTF-8编码器/解码器,它们可以利用字符串统计信息,也可以利用JIT优化。我相信很多人都在这样做,我相信你也能找到其他人。

这是我的第一次传递,假设内存不是问题(ha)。

  1. 获取文件在磁盘上的大小(file .length)。
  2. 一次加载整个内容(InputStream.read(byte[]))。
  3. 在内存中将该字符串完全分解为子字符串。
  4. Do Stuff (tm)

请记住,Java内部使用UCS-16存储字符数据,这意味着您的漂亮ASCII文件将占用磁盘大小的x2来考虑"扩展"。例如,您有一个4,124字节的foo.txt文件将至少占用8,248字节的内存。

其他一切都将变慢,因为应用程序将被设计为处理某种缓冲和包装(特别是,处理没有足够的内存来处理文件大小)。

祝你好运!

相关内容

  • 没有找到相关文章

最新更新