我有一个包含数百万行的文件。我需要尽可能快地读取多线程。我需要通过http请求发送哪一行。可能是我应该将该文件拆分到其他较小的文件上并阅读。我需要一些想法。
答案 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列表,然后将其发送给执行程序进行处理。这是你能做的最好的事情。调整执行程序线程的大小和一次性读取的行数,以及对你有用的内容。