第一次轉到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類型的了,再一個就是大小端的問題,這是大端的做法
對於大小端自動區別我這里記錄一個更加詳細的方法
http://blog.csdn.net/tengdazhang770960436/article/details/7444627