javajava大端
① java 中怎樣將 bytes 轉換為 long 類型
方法有以下三種:
1、不藉助其他任何已經有的類,直接進行轉換。
2、藉助java.nio.ByteBuffer實現,只要將byte[]轉換為ByteBuffer就可以實現所有primitive類型的數據讀取。
3、藉助java.io.DataInputStream實現,只要將byte[]轉換為DataInputStream就可以實現所有primitive類型的數據讀取。
② Java盲區:如何用Java檢測大端和小端
static ByteOrder byteOrder() { if (byteOrder == null) throw new Error("Unknown byte order"); return byteOrder;
} static { long a = unsafe.allocateMemory(8); try { unsafe.putLong(a, 0x0102030405060708L); byte b = unsafe.getByte(a); switch (b) { case 0x01: byteOrder = ByteOrder.BIG_ENDIAN; break; case 0x08: byteOrder = ByteOrder.LITTLE_ENDIAN; break; default:
assert false;
byteOrder = null;
}
} finally { unsafe.freeMemory(a);
}
}
③ 基本類型轉Byte,Java與C平台區別
項目中要將坐標數據進行傳輸,自然用到float基本類型轉byte。但跨平台聯調時發現android發出得數據在ios端解析出來的坐標不對。但自身調試都正常。看了ByteBuffer源碼發現ByteBuffer有個order方法。網路了一下才發現原來java平台和c平台對byte有大小端排序。而且java默認使用大端排序,c默認使用小端排序。至此基本明白為什麼解析數據不對得問題。2邊數據結構不一致。解決辦法2邊都使用一致得排序。
代碼如下:android
④ JAVA程序編寫的文件是什麼格式的
JAVA
程序編寫的源文件(源代碼)是以".java"為結尾的,JVM(JAVA虛擬機解析的文件)是以".class"為結尾的,".class"文件就是java的可執行文件,同.exe文件具有同等的效果,.class文件採用的是魔力數字存儲,同時為了在不同的CPU下運行,規定了位元組的保存形式,採用大端位元組順序(BIG_ENDIAN)來保存的。而且".class"文件裡麵包含有編譯器的版本以及兼容性數據!