我有一个数据库转储文件,我需要原始操作。我需要读取文件,逐行操作,但我不能将整个文件放在内存中(理论上它们可以是10gb +)。
我希望能够在我去的时候单独阅读并操作每一行,直到文件结束。它必须是奇怪的字符友好(可以有各种各样的字节)。
答案 0 :(得分:2)
您可以调整旧的nio示例grep并删除模式匹配,如果您不需要它。
答案 1 :(得分:0)
如果换行不感兴趣,可以使用BufferedReader#readLine()并将字符串转换回字节[]
另一种方法是使用byte []作为缓冲区(必须足够大的一行)并使用InputStream #read(byte [])用字节填充它。然后,您可以在缓冲区中搜索换行符并使用部分缓冲区。一旦找不到换行符,请通过System#arraycopy()将数据移到左侧,并通过InputStream#read(byte [],int,int)用新数据填充其余数据,然后继续。
但要小心!取决于编码(例如,unicode),一个字节不必是一个字符