Java 读取 .cdr 文件

Java read .cdr-File

现在我正在尝试编写一个读取 .cdr 文件的程序。 CDR 文件的格式如下所示:

***************
                             * File header *
                             ***************
                           File length: 44142 bytes
                         Header length: 54 bytes
               High release identifier: Check the field extension below
               High version identifier: Version 6
                Low release identifier: Check the field extension below
                Low version identifier: Version 6
          File opening local timestamp: May 20 00:28 (+02:00 from UTC)
         Timestamp of last CDR on file: May 20 01:28 (+02:00 from UTC)
            Number of CDRs in the file: 130 CDRs
                  File sequence number: 386
           File closure trigger reason: File open-time limit reached
IP address of node generating the file: ff.ff.ff.ff::ffff:ac10:1438
                    Lost CDR indicator: 0 CDRs lost
         Length of CDR routeing filter: 0 bytes
          Length of private extensions: 0 bytes
             High release ID extension: Release 13
              Low release ID extension: Release 13

这是我的代码:

读取二进制方法:

public Collection<Data> readBinary(String file) throws IOException, FileNotFoundException
    {
        ArrayList<Data> arrayList=new ArrayList<>();
        try(DataInputStream dis=new DataInputStream(new BufferedInputStream(new FileInputStream(file))))
        {
            while (dis.available()>0)
            {
                arrayList.add(new Data(dis.readUTF(), dis.readUTF(), dis.readUTF(), dis.readUTF(), dis.readUTF(), dis.readUTF(),dis.readUTF(), dis.readUTF(), dis.readUTF(), dis.readUTF(), dis.readInt(), dis.readUTF(), dis.readUTF(), dis.readUTF(), dis.readUTF(), dis.readUTF(), dis.readUTF(), dis.readUTF()));
            }
        }
        return arrayList;
    }

主要内容:

public class Main implements Serializable
{
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Methoden m = new Methoden();
        try {
            ArrayList<Data> d1 = (ArrayList<Data>) m.readBinary("172.16.20.5601_-_386.20210520_-_0128+0200.cdr");
            System.out.println(d1);

            

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

所以我的问题是,当我 运行 我得到一个 EOFException 程序时,我不明白为什么..

也许有人可以帮我解决我的问题

您首先需要阅读的是文件头中的文件长度字段。这可能是一个字节或两个字节 - 检查您的规范。看起来您正在使用 DataInputStream.readUTF 阅读,这不适合阅读此类字段。

您需要根据文件排版来阅读。您似乎没有遵循文件布局,因此碰巧尝试读取比您应该读取的更多的数据,因此异常。