如何从文件中读取字节,位运算
我是想用java读取一个用C 写的二进制文件,读出来的就是错的,想着先读取一个int然后进行位运算重新组成一个int输出,如此循环。
从文件中读取4个字节,然后进行位运算,我不是很懂这个,自己想着写了一些代码求教:
FileInputStream readFile=new FileInputStream("D:/haier.bin");
DataInputStream dos=new DataInputStream(readFile);
byte[] i=new byte[4];
int readI=0;
while((readI=dos.read(i))!=-1){
byte byte4 = (byte) (readI & 0xff);
byte byte3 = (byte) ((readI & 0xff00) >> 8);
byte byte2 = (byte) ((readI & 0xff0000) >> 16);
byte byte1 = (byte) ((readI & 0xff000000) >> 24);
int real=(byte1& 0xff)<<0 + (byte2& 0xff)<<8 + (byte3& 0xff)<< 16 +(byte4& 0xff)<<24;
System.out.println(Integer.toBinaryString(real));
}
dos.close();
java
byte
位运算
------解决方案--------------------你最好别使用数组 因为你不知道这个数组到底要存放多少数据 建议使用List集合
byte byte1 = i[0];
byte byte2 = i[1];
byte byte3 = i[2];
byte byte4 = i[3];
List<Integer> list = new ArrayList<Integer>() ;
int real=(byte1& 0xff)<<0
------解决方案--------------------(byte2& 0xff)<<8
------解决方案-------------------- (byte3& 0xff)<< 16
------解决方案--------------------(byte4& 0xff)<<24;
System.out.println(real);
list.add(real) ;
}
这样就可以了
------解决方案--------------------首先,那个二进制文件不能太大,否则会爆掉内存。
其次,两种方案,可以选择:
方案一:根据文件大小,算出数组的长度,读取数据;
方案二:和楼上的一样,创建一个链表,填充链表,转换成数组即可。