java - 性能改进 30 分钟内 : How to read only last 10 lines of 100, 000 个文件

标签 java performance file-io collections

我对应该使用哪个集合有一个疑问。已经讨论了很多,但希望获得更多意见。

我有一个源系统,大约每 30 分钟就有 100,000 个交易文件进入我的应用程序。每个文件都有很多行代码(比如 1000 行)。我的应用程序应仅存储和处理最后 10 行交易详细信息。

如果我使用缓冲区读取器逐行读取文件内容,那么我必须继续在某个集合中添加每一行详细信息,最后一旦到达最后一行,就会以某种方式删除所有内容并仅保留最后 10 行。因此,即使我不需要全部,保留所有 1000 行也是一个性能问题。有没有任何集合或任何方法来改进这一点。

最佳答案

您可以使用 CircularFifoBuffer :

CircularFifoBuffer is a first in first out buffer with a fixed size that replaces its oldest element if full.

仅保留最后 10 行的用法:

CircularFifoBuffer buffer = new CircularFifoBuffer(10);
// read lines and add them to the buffer

读取行结束时,缓冲区仅包含最后 10 行。

关于java - 性能改进 30 分钟内 : How to read only last 10 lines of 100, 000 个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18399582/

相关文章:

java - 如何在没有 Thread.sleep() 的情况下等待一段时间?

Hyperledger Fabric 的性能测试

android - 在 Activity 布局的 Root View 上使用 Android <merge> XML 元素

javascript - AngularJS 摘要回调

c++ - 计算某些单词在 C++ 中的文本文件中出现的次数

java - 由可配置的子 Web 应用程序共享的 Tomcat 父 Web 应用程序

java - hibernate - SQLGrammarException : could not extract ResultSet on Persist

c++ - 如何在 fstream 中使用引号?

java - 从 Java Swing 读取文件

java - 为什么curl在Java中运行时会失败?