从Java文件中读取和写入字符串的绝对最快方式是什么?
问题描述:
什么是从Java文件读取和写入字符串的绝对最快的方式?从Java文件中读取和写入字符串的绝对最快方式是什么?
我需要阅读的已知格式的文件转换成String[]
—,其中每行是阵列—在一个项目,然后回到该文件。
阅读尤其必须尽可能快。
有没有更好的办法,然后只使用线BufferedReader
和阅读行到一个数组?
答
只是一个疯狂的想法:你可以写在文件中的每个字符串的长度。喜欢的东西:
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();
这从\n
检查每个输入字节释放BufferedReader
。虽然我不确定这会比readLine()
更快。
答
这里将是我的第一关,假设该内存是不是一个问题(公顷)。
- 获取文件大小,因为它坐落在磁盘上(File.length)。
- 分配该大小缓冲区。
- 加载整个事件(InputStream.read(byte []))。
- 将该字符串完全拆分为内存中的子字符串。
- 做的东西(TM)
- 反向上面进行保存。
请记住,Java在内部使用UCS-16存储字符数据,这意味着您的漂亮ASCII文件将在磁盘上占用x2大小来解释“扩展”。例如你有一个4,124字节的foo.txt文件将在内存中至少8,248字节。
其他的一切将是比较慢的,因为应用程序将被专门用来对付某种缓冲和包装的(特别是对付没有足够的内存来处理的文件大小)。
祝你好运!
http://stackoverflow.com/questions/326390/how-to-create-a-java-string-from-the-contents-of-a-file – OscarRyz 2011-04-04 20:55:14
读写行不是序列化。我会纠正标题。 – 2011-04-04 20:56:18
@Tom,好主意,但我觉得我们不妨一路走来修复身体。 @丹,我们正在编辑,因为“序列化”在Java中具有特定的含义,与您使用它的方式不匹配。 – Pops 2011-04-04 21:00:04