java - 将字符附加到加载到内存中的文件的最快/最有效的方法是什么?

标签 java file-io java.util.scanner

    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/

相关文章:

java - 与公共(public)API的连接

Java Scanner 分隔符不会分割最后一部分

java - chalice /hibernate : No row with the given identifier exists

java - 如何去除Java持久化的无状态实体

java - Lucene 7 的日期范围查询

c# - 获取一个文件并将其分成 2 组

python - 打开未知扩展名的现有文件

java - 无法附加到 java 中的文本文件。可以创建 .txt 文件并添加数据,但会被覆盖

Java Scanner 无法读取我的 txt 文件

java - Scanner Java 只读取第一行