我想要一个 hyuuge (.csv) 文件的前一万行。
天真的方式
1)创建一个读者和作家
2)逐行读取原始文件行
3)将前一万行写入新文件
不可能是最快的,不是吗?
这将是我的应用程序中的常见操作,所以我有点担心速度,但也只是好奇。
谢谢。
我想要一个 hyuuge (.csv) 文件的前一万行。
天真的方式
1)创建一个读者和作家
2)逐行读取原始文件行
3)将前一万行写入新文件
不可能是最快的,不是吗?
这将是我的应用程序中的常见操作,所以我有点担心速度,但也只是好奇。
谢谢。
有几种方法可以在 Java 中进行快速I/O,但如果没有针对您的特定情况进行基准测试,很难得出一个数字/建议。以下是您可以尝试基准测试的几种方法:
如果您只想读/写 10,000 行左右:
BufferedReader.readLine()
话虽如此,您可以比使用或其他方式一次阅读一行做得更好。
根据文件的字符编码,您将通过使用具有大缓冲区大小的 BufferedInputStream 和 BufferedOutputStream 执行按字节 I/O 获得更好的性能。只需编写一个循环来读取一个字节,有条件地更新行计数器并写入字节......直到您复制了所需的行数。(这假设您可以通过检查字节来检测 CR 和/或 LF 字符。这适用于我所知道的所有字符编码。)
如果使用 NIO 和 ByteBuffers,可以进一步减少内存中的复制量,尽管 CR/LF 计数逻辑会更复杂。
但是你应该问的第一个问题是,是否值得费心去优化它。
线的长度是否相同。如果是这样,您可以使用 RandomAccessFile 读取 x 字节,然后将这些字节写入新文件。不过,它可能会占用大量内存。我怀疑这会更快,但可能值得进行基准测试。此解决方案仅适用于固定长度的线