日期:2014-05-20  浏览次数:20788 次

如何从文件中读取字节,位运算
我是想用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) ;
}
这样就可以了
------解决方案--------------------
首先,那个二进制文件不能太大,否则会爆掉内存。
其次,两种方案,可以选择:
方案一:根据文件大小,算出数组的长度,读取数据;
方案二:和楼上的一样,创建一个链表,填充链表,转换成数组即可。