gpt4 book ai didi

java - 为什么直接使用 print() 方法存储数据比将其存储在字符串中然后写入文件更快?

转载 作者:行者123 更新时间:2023-11-29 03:16:06 24 4
gpt4 key购买 nike

让我们考虑这个场景:我正在读取一个文件,然后稍微调整每一行,然后将数据存储在一个新文件中。现在,我尝试了两种方法:

  1. 将数据存储在一个字符串中,然后像这样在最后将其写入目标文件:

            InputStream ips = new FileInputStream(file);
    InputStreamReader ipsr = new InputStreamReader(ips);
    BufferedReader br = new BufferedReader(ipsr);

    PrintWriter desFile = new PrintWriter(targetFilePath);
    String data = "";
    while ((line = br.readLine()) != null) {
    if (line.contains("_Stop_"))
    continue;
    String[] s = line.split(";");
    String newLine = s[2];
    for (int i = 3; i < s.length; i++) {
    newLine += "," + s[i];
    }
    data+=newLine+"\n";
    }
    desFile.write(data);
    desFile.close();
    br.close();
  2. 在 while 循环中直接使用 PrintWriter 的 println() 方法,如下所示:

             while ((line = br.readLine()) != null) {
    if (line.contains("_Stop_"))
    continue;
    String[] s = line.split(";");
    String newLine = s[2];
    for (int i = 3; i < s.length; i++) {
    newLine += "," + s[i];
    }
    desFile.println(newLine);
    }
    desFile.close();
    br.close();

第二个过程比第一个过程快得多。现在,我的问题是在这两个过程中发生了什么如此不同以至于执行时间差异如此之大?

最佳答案

附加到您的字符串将:

  1. 为新字符串分配内存
  2. 复制之前复制的所有数据。
  3. 从新字符串中复制数据。

你对每一行重复这个过程,这意味着对于 N 行输出,你复制了 O(N^2) 个字节。

同时,写入您的 PrintWriter 将:

  1. 将数据复制到缓冲区。
  2. 偶尔刷新缓冲区。

这意味着对于 N 行输出,您只复制 O(N) 个字节。

关于java - 为什么直接使用 print() 方法存储数据比将其存储在字符串中然后写入文件更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26557375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com