gpt4 book ai didi

java - 使用 BufferedReader 从文件中读取一组行

转载 作者:行者123 更新时间:2023-12-01 12:44:17 30 4
gpt4 key购买 nike

我有一个大约 1.6 GB 的大型 CSV 文件,我正在尝试读取该文件并创建这些行的 JSON 数组,并将其发送到其他消耗品进程。

我有以下代码

while(consumeover){
try (BufferedReader br = new BufferedReader(new FileReader
("/my/path/largefile"),65536)) {
for (String line; (line = br.readLine()) != null;) {
String[] dataRow = line.split("\\|");
//create json array
//add each dataRow element to array
}
}
}

现在发生的事情是上面的代码读取整个文件并创建 json 数组,这会抛出“内存不足”错误。每次创建 json 数组时,我想读取一组行(例如 1000 行)。如何将上次读取位置设置为 i+1000?由于文件非常大,Java 由于创建数据数组而导致内存不足。

最佳答案

简单的解决方案是在获取时输出每一行(不是将其保存在数组中然后发送/写入),或者在获取时每 1000 行输出。这样你就可以一次性读取该文件。内存中保存的行越少,使用的内存就越少。

注意:从第 N 行开始读取的唯一方法是读取 N 行并忽略它们。随着文件变大,这将变得越来越昂贵。

假设您有一个方法可以将一行 CSV 转换为 Json。

try(BufferedReader br = new BufferedReader(new FileReader(infile));
PrintWriter bw = new PrintWriter(new FileWriter(outfile))) {
for(String line; (line = br.readLine()) != null;) {
String json = process(line);
bw.println(json);
}
}

无论文件有多大,这只需要足够的内存来存储一行 CSV 和一行 JSON。

关于java - 使用 BufferedReader 从文件中读取一组行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24838495/

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