【问题标题】:The readUTF() method of the DatainputStream, which reads the text data separately, will report an EOF exception. Why? [duplicate]DatainputStream的readUTF()方法,单独读取文本数据,会报EOF异常。为什么? [复制]
【发布时间】:2020-04-28 16:09:51
【问题描述】:

我使用datainputstream.readUTF()方法读取带有数据的文本文件,总是EOF Exception,我不明白这是为什么?

public void readDataDemo() throws IOException {
        RandomAccessFile randomAccessFile = new RandomAccessFile("temp/buf.txt", "rw");
        String str = randomAccessFile.readUTF();
        randomAccessFile.close();
    }

【问题讨论】:

标签: java


【解决方案1】:

DataInputStream.readUTF 不适合阅读文本文件。

它实际上是为读取嵌入在(二进制)数据文件中的字符串而设计的。该方法期望的是一个 2 字节的二进制无符号整数,它给出了 UTF 编码字符串的长度(以字节为单位)。接下来是“修改后的 UTF-8”数据的字节。有关详细信息,请参阅以下链接:

如果您尝试使用 DataInputStream.readUTF() 读取常规文本文件,它会将文件中的前 2 个字符误解为字节数,然后尝试读取该字节数。根据(假定的)计数和文件大小,可能会尝试读取文件末尾...导致 EOF 异常。

这里有一些问答,解释了从文本文件中读取文本的一些正确方法:

但请注意,它们都不涉及DataInputStream。该类用于读取 二进制 数据文件,而不是文本文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多