Java 使用RandomAccessFile和多线程时,如何拆分大字符文件?
我必须读一个大的字符文件。然后我找到了满足我需要的Java 使用RandomAccessFile和多线程时,如何拆分大字符文件?,java,Java,我必须读一个大的字符文件。然后我找到了满足我需要的RandomAccessFile。我试了一下,然后遇到了一个问题,那就是如何获得每个线程开始的点 RandomAccessFile API按字节读取文件,但该文件是字符集,我需要处理每一行。那么如何按行拆分它呢 谢谢你的帮助 NIO不能这样做 我必须读一个大的char文件 因此,您应该使用FileReader,它可能包装在BufferedReader中 然而,用多个线程读取文件并不能为您带来任何好处。磁盘不是多线程的 而且你不能同时读线。这甚至没
RandomAccessFile
。我试了一下,然后遇到了一个问题,那就是如何获得每个线程开始的点
RandomAccessFile API按字节读取文件,但该文件是字符集,我需要处理每一行。那么如何按行拆分它呢
谢谢你的帮助
NIO不能这样做
我必须读一个大的char
文件
因此,您应该使用FileReader
,它可能包装在BufferedReader
中
然而,用多个线程读取文件并不能为您带来任何好处。磁盘不是多线程的
而且你不能同时读线。这甚至没有意义,我发现您的问题不清楚,但在多线程环境中使用RandomAccessFile有什么问题,请小心,因为它不是线程安全的。@luc14n0我只想使用多线程读取文件,每个线程都有一个起点和终点。在我看来,您正在尝试并行读取文件的多个部分,但您希望并行读取行。这是不可能的,除非之前读取了整个文件,因为
RandomAccessFile
允许您按偏移量读取字节,如果您不知道每个\n
的偏移量,则必须在读取之前读取整个文件,而在找到所有\n
之后并行读取则毫无意义,由于您已经阅读了该文件以查找偏移量,因此您将再次阅读该文件以降低应用程序的速度非常感谢!是的,你明白我想说的。@反斜杠,但使用FileReader将线程数限制为1。我必须使用多线程来加速。我已经解决了这个问题。使用BufferedReader.readLine()
,每秒可以读取数百万行。我想比BufferedReader.readLine()
更快,所以我尝试使用多线程。但它似乎没有效果。