第一次转到Java平台。。。。不熟练,这边记录一下我用Java来处理二进制的文件
现在在做的是一个超大的二进制文件,后缀名居然是txt,我按照文本读的,结果全是乱的。。。后来才知道这玩意是二进制文件。。
发现java中有超级多的读二进制的方法,也是分大小端,用起来还都算方便。。
先说按照数据类型读取———readChar(); readDouble(); readFloat(); readLong(); readShort(); readUTF();等一大堆这样的函数简单易用,但是仅仅是按照这样读取效率会低,因为文件存在硬盘中,多次对于磁盘IO会比内存中处理差了不少。。数据量比较大,所以这些还都是要考虑的。。。所以我在实际做的时候选了下面的方法
一次性读取很多个字节,然后按照字节的顺序再转换成各种类型,就是byte[]转换为int, short等,至于转换成double, float我这里没用到,不写进来了。。
读字节
1 File file = new File(fileName);
2 in1 =new FileInputStream(file);
3 data_in = new DataInputStream(in1);
4 byte[] itemBuf = new byte[888];
5 data_in.read(itemBuf, 0, 888);
这里是byte[]转int和short的方法
public static short getShort(byte buf1, byte buf2)
{
short r = 0;
r |= (buf1 & 0x00ff);
r <<= 8;
r |= (buf2 & 0x00ff);
return r;
}
public static int getInt(byte buf1, byte buf2, byte buf3, byte buf4)
{
int r = 0;
r |= (buf1 & 0x000000ff);
r <<= 8;
r |= (buf2 & 0x000000ff);
r <<= 8;
r |= (buf3 & 0x000000ff);
r <<= 8;
r |= (buf4 & 0x000000ff);
return r;
}
用这种方法就可以把byte转换成int或者short类型的了,再一个就是大小端的问题,这是大端的做法
对于大小端自动区别我这里记录一个更加详细的方法