gpt4 book ai didi

Java迭代读取和解析

转载 作者:行者123 更新时间:2023-12-02 07:43:22 25 4
gpt4 key购买 nike

我有一个日志文件,正在将其读取为字符串

public static String read (String path) throws IOException {
StringBuilder sb = new StringBuilder();
FileInputStream fs = new FileInputStream(path);
InputStream in = new BufferedInputStream(fs);

int r;
while ((r = in.read()) != -1) {
sb.append((char)r);
}

fs.close();
in.close();

return sb.toString();
}

然后我有一个解析器,它会迭代整个字符串一次

void parse () {
String con = read("log.txt");
for (int i = 0; i < con.length; i++) {
/* parsing action */
}
}

这极大地浪费了 CPU 周期。我循环阅读 Read 中的所有内容。然后我循环遍历 Parse 中的所有内容。我可以将 /* 解析操作 */ 放在 Read 方法中的 while 循环下,该方法可以找到,但我不想复制所有相同的代码在这个地方。

如何在内容的一次迭代中解析文件,并且仍然具有单独的解析和读取方法?

在 C# 中,我知道存在某种yield return 的东西,但我被 Java 锁定了。

我在 Java 中有哪些选择?

最佳答案

This is hugely a waste of cpu cycles. I loop over all the content in Read. Then I loop over all the content in Parse. I could just place the /* parsing action */ under the while loop in the Read method, which would be find but I don't want to copy the same code all over the place.

这比仅仅浪费 CPU 周期更糟糕。如果您只打算使用它一次,并且使用一次向前查看一个字符(如代码所示),那么将整个文件读入字符串会浪费大量内存。如果您的文件很大,则会耗尽内存。

您应该在阅读时进行解析,并且永远不要将整个文件一次加载到内存中。

如果需要从多个地方调用解析操作,请将其设为一个函数并调用它,而不是在各处复制相同的代码。复制单行函数调用就可以了。

关于Java迭代读取和解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11277703/

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