繁体   English   中英

Java迭代读取和解析

[英]Java iteration reading & parsing

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

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方法中将/* parsing action */放在while循环中,这可以找到,但我不想在整个地方复制相同的代码。

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

在C#中我理解有某种收益返回的东西,但我已经被Java锁定了。

我在Java中的选择是什么?

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

这比仅仅浪费cpu周期更糟糕。 将整个文件读入字符串是一个巨大的内存浪费,如果你只打算使用它一次,并且正如你的代码所示,使用的是一次查看一个字符。 如果你的文件很大,你会耗尽内存。

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

如果需要从多个位置调用解析操作,请将其设置为函数并调用它,而不是在整个位置复制相同的代码。 复制单行函数调用很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM