在java中读取包含数百万行的文件的最佳方法

时间:2014-09-08 09:42:04

标签: java file http

我有一个包含数百万行的文件。我需要尽可能快地读取多线程。我需要通过http请求发送哪一行。可能是我应该将该文件拆分到其他较小的文件上并阅读。我需要一些想法。

4 个答案:

答案 0 :(得分:2)

您可以使用FileStream.Read方法读取一个文本块,并将其添加到新Thread中的另一个结果字符串中。

答案 1 :(得分:1)

您不需要从多个线程中读取它,因为瓶颈将是网络带宽,而不是磁盘的读取速度。

这是一种有效的单线解决方案:

Files.copy(Paths.get("/path/to/file.txt"), response.getOutputStream());

答案 2 :(得分:0)

发送时带宽减少 如果浏览器具有该功能集,大多数http服务器都可以将GZIP 压缩文件传送到浏览器。几乎一个oneliner支持GZIPOutputStream发送。 (视情况而定,取决于标题。)

内存映射文件: 您可以使用 RandomAccessFile 并获取该频道的 MemoryMappedByteBuffer 。然后通过在某个位置之后读取第一个\n来分块,找到确切的分割位置。

通常,文件中的这种并行读取对于硬件/系统软件来说不是最佳的。所以你不会逃避采取不同解决方案的时间。

并行输入和输出: 实际上我会使用一个线程进行读取而另一个用于写入,因此它们是分离的。检查哪个线程必须等待更多,并改善该方面。 我打赌这是网络。

答案 3 :(得分:-1)

一次将x行读入行VO列表,然后将其发送给执行程序进行处理。这是你能做的最好的事情。调整执行程序线程的大小和一次性读取的行数,以及对你有用的内容。