【问题标题】:Java How to read a file line by line. Each line is mixed with both ascII and binaryJava 如何逐行读取文件。每行都混合了 ascII 和二进制
【发布时间】:2012-01-27 11:44:16
【问题描述】:

我有一个文件有多行。

每一行的格式是

"String A" "String B" "binary data"

我想做的是在每行前面添加“String C”

"String C" "String A" "String B" "binary data"

现在我用的是BufferedReader.readline(),这个方法在读取二进制数据的时候好像有问题。

谁能给我一些解决这个问题的建议?

【问题讨论】:

  • “二进制数据”能否包含嵌入的换行符?
  • 正如@aix 指出的那样,如果您使用二进制数据,则无法确定它是否按行分隔,除非您有办法知道它有多长,但它仍然会出现问题。以base64编码或类似的方式对二进制数据进行编码会好得多,这样它就不会与其他文本发生冲突。
  • 二进制数据是什么意思?

标签: java io binary inputstream bufferedreader


【解决方案1】:

如果您的文件中有二进制数据,则不应使用 readLine() 方法,该方法假定您的行将以 '\r'、'\n' 或 "\r\n" 结尾。 “二进制数据”可能会偶然包含该序列并弄乱您的 readLine()。

一般来说,您不应该将二进制数据与文本数据混合在一起。

【讨论】:

    【解决方案2】:

    我认为您必须自己读取二进制缓冲区并解释您的格式,即找到文本提取字节的位置并将它们转换为字符串。

    读取器无法读取二进制数据。没办法。

    【讨论】:

      【解决方案3】:

      比“二进制数据可能包含换行符”更严重的问题显然是二进制数据甚至可能根本不包含有效的 unicode 代码点!因此,在任何情况下,您都不应该将二进制数据解释为文本,但另一种方式就可以了。

      这意味着:将数据读入字节缓冲区并自己解释。

      【讨论】:

        猜你喜欢
        • 2019-02-11
        • 2016-01-24
        • 2011-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-27
        • 2012-07-25
        • 1970-01-01
        相关资源
        最近更新 更多