gpt4 book ai didi

java - 缩放文本文件 IO 应用程序

转载 作者:行者123 更新时间:2023-12-02 00:06:53 25 4
gpt4 key购买 nike

我正在编写一个 Java 应用程序,它读取逗号分隔的文本文件,对数据执行一些计算并将更新的数据写入新文件。输入文件包含大约 5 亿行,因此我尝试尽可能地扩展以下内容,以便在运行它时不会出现内存不足异常。关于如何改进以下内容有什么想法吗?

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class CsvTest {

public void readFile() {

BufferedReader br = null;
BufferedWriter out = null;

try {

br = new BufferedReader(new FileReader("C:\\input.txt"));
FileWriter fstream = new FileWriter("C:\\output.txt");
out = new BufferedWriter(fstream);

String line = null;

while ((line = br.readLine()) != null) {
out.write(line + "\r\n");
}
}
catch (FileNotFoundException ex) {
System.err.println("Error: " + ex.getMessage());
}
catch (IOException ex) {
System.err.println("Error: " + ex.getMessage());
}
finally {
try {
if (br != null) {
br.close();
}
if(out != null){
out.close();
}
}
catch (IOException ex) {
System.err.println("Error: " + ex.getMessage());
}
}
}

public static void main(String[] args) {
CsvTest test = new CsvTest();
test.readFile();
}
}

最佳答案

你的代码非常好,我的意思是你将数据从输入流式传输到内存中仅保留一行的输出,所以就内存要求而言基本上是 O(1),你不能得到比这更好的了我认为。

缓冲读取器和缓冲写入器中的缓冲区是恒定的,相对于多 GB 文件的大小,内存使用量可以忽略不计。

编辑:垃圾收集器应该可以很好地收集未使用的数据,至少我在类似的数据处理情况下的经验是非常积极的。

关于java - 缩放文本文件 IO 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13653729/

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