你如何阅读“单词”具有不同字节长度的二进制数据文件?

时间:2016-08-26 16:55:11

标签: java binary

我正在尝试使用Java读取二进制文件。我目前正在使用

    DataInputStream dis = new DataInputStream( new FileInputStream(new File("file")));

我知道前48个字节是标题。前20个字节是一个字符串,我能够像这样读取它:

    readByte = new byte[20];
    dis.read(readByte);
    string = new String(readByte);
    System.out.println(string);

然后接下来的10个字节是小数(不是100%确定格式 - 我猜双重可行,但我可能需要凭经验发现)。我一直试图找出如何获得这个数字,但我是Java的新手。看起来这应该是相对直截了当的,但我没有运气。我尝试了其他线程中提到的一些想法,但我无法让它工作,只会出现乱码乱码。

谢谢!

1 个答案:

答案 0 :(得分:0)

有两种可能的方法来解决这个问题:

1-因为您知道字段的长度,那么您应该使用DataInputStream的已定义函数来读取 check here仅当您只需要标题的特定字段

时,这才有用

2-或者您可以阅读整个标题并提取字段信息,最好在课堂中使用它,使用java.nio.ByteBuffer课程进行转换

public class Header{
     byte headerBytes;
     Header(byte[] hBytes){
          headerBytes = hBytes;
     }
     // here you implement getters/setters for your header 
     public String getFirstField(){
           byte[] field = new byte[20];// you can declare this as a class var it would be better
           for (int i = 0; i<20; i++)
                field[i] = this.headerBytes[i];   
           return new String(field/*,maybe put the encoding here */);
     }
     public Integer getAnIntField(pos start){// just a example how to get Integer 
           for (int i = start; i<4; i++)
                field[i] = this.headerBytes[i];
           return new Integer(ByteBuffer.wrap(bytes).getInt());   
     }

}