我正在尝试使用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的新手。看起来这应该是相对直截了当的,但我没有运气。我尝试了其他线程中提到的一些想法,但我无法让它工作,只会出现乱码乱码。
谢谢!
答案 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());
}
}