Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用RandomAccessFile和多线程时,如何拆分大字符文件?_Java - Fatal编程技术网

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()
更快,所以我尝试使用多线程。但它似乎没有效果。