【问题标题】:Most elegant way to read a file and operating on lines as bytes读取文件并将行作为字节操作的最优雅方式
【发布时间】:2011-10-27 04:35:23
【问题描述】:

我有一个需要原始操作的数据库转储文件。我需要读取文件,逐行对其进行操作,但我不能将整个文件放在内存中(理论上它们可以是 10gb +)。

我希望能够读取它并对每一行进行单独操作,直到文件结束。它必须对奇怪的字符友好(可以包含各种字节)。

【问题讨论】:

  • 使用 FileInputStream。它给你字节,无论你想要多少。您必须自己识别换行符,但我假设您会知道它们的样子......
  • 知道数据库转储的编码吗?还是它真的包含二进制(非文本)数据?

标签: java


【解决方案1】:

如果不需要,您可以修改旧的 nio 示例 grep 并删除模式匹配。

【讨论】:

    【解决方案2】:

    如果换行符不感兴趣,您可以使用 BufferedReader#readLine() 并将字符串转换回字节[]

    另一种方法是使用 byte[] 作为缓冲区(必须足够大以容纳一行)并使用 InputStream#read(byte[]) 用字节填充它。然后您可以在缓冲区中搜索换行符并使用缓冲区的一部分。一旦找不到换行符,通过 System#arraycopy() 将数据移动到左侧,然后通过 InputStream#read(byte[], int, int) 用新数据填充其余部分,然后继续。

    但要小心!取决于编码(例如 unicode),一个字节不必是一个字符

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 2020-04-27
      • 2023-03-27
      • 2010-09-16
      • 1970-01-01
      相关资源
      最近更新 更多