gpt4 book ai didi

java - 用 Java 读取大文件

转载 作者:IT老高 更新时间:2023-10-28 20:22:03 29 4
gpt4 key购买 nike

我需要非常了解 Java 和内存问题的人的建议。我有一个大文件(大约 1.5GB),我需要将这个文件剪切成许多(例如 100 个小文件)较小的文件。

我一般都知道怎么做(使用 BufferedReader),但我想知道您是否对内存有任何建议,或者提示如何更快地做到这一点。

我的文件包含文本,它不是二进制文件,每行大约有 20 个字符。

最佳答案

为了节省内存,不要在内存中不必要地存储/复制数据(即不要将它们分配给循环外的变量)。只要输入进来就立即处理输出。

你是否使用 BufferedReader 并不重要。正如一些人暗示的那样,它不会花费更多的内存。它最多只能达到性能的几个百分比。这同样适用于使用 NIO。它只会提高可伸缩性,而不是内存使用。只有当您在同一个文件上运行数百个线程时,它才会变得有趣。

只需遍历文件,读入时立即将每一行写入其他文件,计算行数,如果达到 100,则切换到下一个文件,等等。

启动示例:

String encoding = "UTF-8";
int maxlines = 100;
BufferedReader reader = null;
BufferedWriter writer = null;

try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream("/bigfile.txt"), encoding));
int count = 0;
for (String line; (line = reader.readLine()) != null;) {
if (count++ % maxlines == 0) {
close(writer);
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/smallfile" + (count / maxlines) + ".txt"), encoding));
}
writer.write(line);
writer.newLine();
}
} finally {
close(writer);
close(reader);
}

关于java - 用 Java 读取大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2356137/

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