gpt4 book ai didi

java - 在 Java 中读取 3GB 的非常大的 csv 文件的内存有效方法是什么?

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

我写了2个方法来读取文件

 public static void parseCsvFile(String path) throws IOException {
FileInputStream inputStream = null;
Scanner sc = null;
try {
inputStream = new FileInputStream(path);
sc = new Scanner(inputStream, "UTF-8");
while (sc.hasNextLine()) {
String line = sc.nextLine();
//logger.info(line);
}
// note that Scanner suppresses exceptions
if (sc.ioException() != null) {
throw sc.ioException();
}
} finally {
if (inputStream != null) {
inputStream.close();
}
if (sc != null) {
sc.close();
}
}
}

public static void parseCsvUsingJavaStream(String path) {
try (Stream<String> stream = Files.lines(Paths.get(path))) {
stream.forEach(System.out :: println);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}

从第一种方法中,我了解到该方法不会立即将文件中的所有行加载到内存中,这是内存高效的。我想使用 lambda 表达式来实现相同的目的。我的问题是我的第二种方法是否将所有行加载到内存中?如果是,那么如何使我的第二种方法内存高效?

最佳答案

您的问题的答案在 Files.lines javadoc 中:

Read all lines from a file as a Stream. Unlike readAllLines, this method does not read all lines into a List, but instead populates lazily as the stream is consumed.

您的第二个代码示例的内存效率应与第一个代码示例大致相同。

关于java - 在 Java 中读取 3GB 的非常大的 csv 文件的内存有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49128378/

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