java – 从大文件中提取模式的更多性能方法(超过700MB)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 从大文件中提取模式的更多性能方法(超过700MB),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1887字,纯文字阅读大概需要3分钟。
内容图文
我有一个问题,需要我从本地机器解析一个文本文件.有一些并发症:
>文件可能很大(700mb)
>模式出现在多行中
>我需要在模式之后存储行信息
我使用BufferReader,String.indexOf和String.substring(获取第3项)创建了一个简单的代码.
在文件内部,它有一个名为code =的密钥(模式),它在不同的块中多次出现.程序使用BufferReader.readLine从该文件中读取每一行.它使用indexOf检查模式是否出现,然后在模式之后提取文本并存储在公共字符串中.
当我用600mb文件运行我的程序时,我发现在处理文件时性能最差.我在CodeRanch中读到一篇文章,认为Scanner类不适用于大文件.
是否有某些技术或库可以提高我的表现?
提前致谢.
这是我的源代码:
String codeC = "code=[";
String source = "";
try {
FileInputStream f1 = new FileInputStream("c:\\Temp\\fo1.txt");
DataInputStream in = new DataInputStream(f1);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
boolean bPrnt = false;
int ln = 0;
// Read File Line By Line
while ((strLine = br.readLine()) != null) {
// Print the content on the console
if (strLine.indexOf(codeC) != -1) {
ln++;
System.out.println(strLine + " ---- register : " + ln);
strLine = strLine.substring(codeC.length(), strLine.length());
source = source + "\n" + strLine;
}
}
System.out.println("");
System.out.println("Lines :" + ln);
f1.close();
} catch ( ... ) {
...
}
解决方法:
您的此代码非常可疑,可能至少会导致您的性能问题的一部分:
FileInputStream f1 = new FileInputStream("c:\\Temp\\fo1.txt");
DataInputStream in = new DataInputStream(f1);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
您没有充分理由涉及DataInputStream,实际上将其用作Reader的输入可以被视为代码损坏的情况.写这个:
InputStream f1 = new FileInputStream("c:\\Temp\\fo1.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fr));
对性能的巨大损害是您正在使用的System.out,特别是如果您在Eclipse中运行时测量性能,但即使从命令行运行也是如此.我的猜测是,这是造成瓶颈的主要原因.无论如何,确保在瞄准最佳性能时不要在主循环中打印任何内容.
内容总结
以上是互联网集市为您收集整理的java – 从大文件中提取模式的更多性能方法(超过700MB)全部内容,希望文章能够帮你解决java – 从大文件中提取模式的更多性能方法(超过700MB)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。