[英]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.