gpt4 book ai didi

java - 运行时优化

转载 作者:行者123 更新时间:2023-12-01 06:53:46 24 4
gpt4 key购买 nike

我需要从文本文件中读取内容,将所有“,”替换为“\n”,然后将结果写入新的文本文件。我的文本文件很大(16MB),需要几个小时才能完成此任务。有没有其他方法可以更快地实现它?

public static void main(String [] args) throws IOException {
String fileName = "file1.txt"; // The name of the file to open.
String s=""; // This will reference one line at a time

BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
int c, n=0;
char character;

while((c = reader.read()) != -1) {
character = (char) c;
if ( character == ',')
s = s + "\n";
else
s += character;
}
reader.close();

PrintWriter out = new PrintWriter("fileName1.txt");

out.println(s);
out.close();
}

最佳答案

Is there any other way to implement it faster?

主要瓶颈是这个语句:

       if ( character == ',')
s = s + "\n";
else
s += character;

基本上,您正在对输入文件中的每个字符进行字符串连接。如果文件中有 N 个字符,则您将创建 N 个字符串,并且串联复制大约 N * (N + 1)/2 个字符。如果 N 是 16,000,000,那么您正在谈论复制的大量字符。 (还有大量的垃圾收集。)

如果您只是想避免连接,解决方案是将 String s 替换为 StringBuilder s ...并使用 append 构建输出字符串的操作。

但在这种情况下,最好的解决方案是为输出文件打开一个 BufferedWriter 并将字符直接写入其中......而不构建内存中的字符串。

<小时/>

跟进

What do you mean?

我的意思是这样的:

public static void main(String[] args) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader("in.txt"));
BufferedWriter writer = new BufferedWriter(new FileWriter("out.txt"))) {
int c;
char character;
while ((c = reader.read()) != -1) {
character = (char) c;
if (character == ',')
writer.write('\n');
else
writer.write(character);
}
}
}

请注意,我使用的是 Java 7“尝试使用资源”语法。 try-catch-finally 语句完成后,资源(即流)将自动关闭。

关于java - 运行时优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18094060/

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