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

Java 二进制I/O跳过字节并仅打印UTF类型,java,io,datainputstream,Java,Io,Datainputstream,这就是我的问题:我需要从.dat文件中读取一些数据,问题是并不是所有的东西都保存相同(一些UTF、Int、Double),所以我不能在循环中只readUTF(),直到它完成为止,因为它会偶然发现一个Int并给我一个错误。我知道的一件事是,在.dat文件中写的东西的顺序是这样的:UTF,Int,Double,Double,Double,Double。以下是我目前掌握的代码: import java.io.*; public class BytePe1 { public static voi

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

import java.io.*;

public class BytePe1 {
   public static void main(String[] args) {
      try {
         FileInputStream fis = new  FileInputStream("ClassList.dat");
         BufferedInputStream bis = new BufferedInputStream( fis );
         DataInputStream dis = new DataInputStream(bis);

         String studentName;
         int studentNumber;

         //while(dis.readLine() != null) {
            System.out.println("Name");
            System.out.println(dis.readUTF());
            System.out.println(dis.readInt());
            System.out.println(dis.readDouble());
            System.out.println(dis.readDouble());
            System.out.println(dis.readDouble());
            //System.out.println(dis.readUTF());
            //And I would need to repeat these steps above but I don't know how many
            //Files there actually are, so I would like to not just spam this until I see errors
         //}
         dis.close();
      }
      catch(Exception e) {
         System.out.println("Exception: " + e.getMessage());
      }
   }
}
这将输出正确的内容,但我不知道我在该文件中保存了多少内容,这就是我想知道的;是否可以跳过文件的某些部分,只打印所有名称,然后打印int等等。 Java有两个有用的方法,和。只要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();
}
试试看{
RandomAccessFile raf=新的RandomAccessFile(“ClassList.dat”、“r”);
while(raf.getFilePointer()
您是否考虑过在文件开头保存文件中的项目数量?许多文件格式都有这样的标题部分。谢谢!以前从没听说过,很高兴你帮了忙:)