ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 从大文件中提取模式的更多性能方法(超过700MB)

2019-06-29 21:47:38  阅读:189  来源: 互联网

标签:java parsing large-files performance


我有一个问题,需要我从本地机器解析一个文本文件.有一些并发症:

>文件可能很大(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,parsing,large-files,performance
来源: https://codeday.me/bug/20190629/1330277.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有