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