read_data = new BufferedReader( new FileReader(args[0]) );
data_buffer = new StringBuffer();
int i;
while(read_data.ready())
{
while((i = read_data.read()) != -1)
{
data_buffer.append((char)i);
}
}
data_buffer.append(System.getProperty("line.separator"));
我想要做的是将整个 .txt 文件读入字符串中,并向该字符串附加换行符。然后能够通过传递 data_buffer.toString() 创建一个新的 Scanner 来处理该字符串。显然,对于非常大的文件,此过程会占用大量时间,而我想做的只是将换行符附加到我读入内存的 .txt 文件中。
我知道整个想法似乎有点古怪或奇怪,但是有没有更快的方法?
干杯:)
最佳答案
做某事最快的方法往往就是根本不做。
为什么不修改解析代码,使得末尾不需要换行符呢?如果您每次都附加它,您也可以更改代码,使其表现得好像它在那里,而实际上并不在那里。
我接下来要尝试的是避免逐个字符创建一个巨大的字符串,因为这确实相当昂贵。您可以基于 InputStream
创建一个 Scanner
,它可能比将数据读入 String
并解析它要快得多。您可以重写 FileInputStream
以在文件末尾返回虚拟换行符,从而避免粘贴字符串的实例化。
如果您确实必须将数据读入缓冲区,那么您可能最好使用流的基于数组的 read()
方法读入字节数组 -比逐字节快得多。由于您可以提前知道文件的大小,因此您可以为缓冲区分配额外的行尾标记空间,并将其插入数组中。与创建 StringBuffer
并从中创建 String
相比,这不需要缓冲区的完整副本。
关于java - 将字符附加到加载到内存中的文件的最快/最有效的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10268654/