二进制I / O跳过字节并仅打印UTF类型

时间:2018-02-06 19:16:08

标签: java io datainputstream

所以这是我的问题:我需要从.dat文件中读取一些数据,问题是并非所有东西都保存相同(某些UTF,Int,Double),所以我不能只是{ {1}}循环直到它完成,因为它会偶然发现一个Int并给我一个错误。我知道的一件事是.dat文件中写的东西的顺序,它们是这样的:UTF,Int,Double,Double,Double。这是我到目前为止的代码:

readUTF()

这将输出正确的内容,但我不知道我在该文件中保存了多少内容,这就是我想知道的内容;是否可以跳过文件的某些部分,只打印所有名称,然后打印int等。 One small part of the reading

1 个答案:

答案 0 :(得分:1)

Java的RandomAccessFile有两种有用的方法,getFilePointer()length()。每当getFilePointer()小于length()时,就有可供读取的数据。

try {
    RandomAccessFile raf = new RandomAccessFile("ClassList.dat", "r");
    while (raf.getFilePointer() < raf.length()) {
        System.out.println(raf.readUTF());
        System.out.println(raf.readInt());
        System.out.println(raf.readDouble());
        System.out.println(raf.readDouble());
        System.out.println(raf.readDouble());
    }
    raf.close();
} catch (Exception e) {
    e.printStackTrace();
}