繁体   English   中英

Java-动态子字符串从文件中提取 - 快速方式

[英]Java- Dynamic Sub String Extraction from File - Fast Way

我有一个大文件,其中包含“ABCDEabcde ..... XYZxyz”等字符序列。 现在,我想从中提取一些子序列字符串。 例如,从第10个字符到第50个字符串,从第15个字符到第55个字符串(所有子序列字符串具有相同的长度,即40个字符和起始位置(例如10,15)总是增加)。 子序列位置是从10到50个字符,从15到55个字符,在从第2个到第42个字符和从第100个到第140个字符的另一个运行中的一次运行中的动态装置。 现在,我必须提取数百万这样的动态子字符串。 我已经尝试了一些方法,如建议我在这里 但是,它对我来说很慢。

我努力了:

1)使用BufferedReader进行简单的缓冲读取,并等待所需的位置块。

2)使用Random Access File和Seek方法来做到这一点。

由于我的文件大约是700 MB(接近2亿个字符)而且我必须提取数百万个这样的动态子字符串,所以它们花了将近一分钟(第一个需要更多)。 任何人都可以通过提供可能比它更快的任何其他想法来帮助我吗? 使用任何Java库对我来说也没关系。

您可以做的最有效的事情是将整个文件映射到内存中。 基本上:

FileChannel channel = new RandomAccessFile(file, "r").getChannel();
ByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());

我认为你可以尝试更高效的东西 - 现代操作系统可以很好地优化内存映射文件。

我认为最快的方法是将整个文件加载到内存中并从那里提取所需的子字符串。 它会占用大量内存,但会更快(这是你的目标)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM