编程语言
首页 > 编程语言> > java – 从大文件中提取模式的更多性能方法(超过700MB)

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

作者:互联网

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

>文件可能很大(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