Java 基礎byte[]與各種資料型別互相轉換的簡單範例
這裡對byte[]型別對long,int,double,float,short,cahr,object,string型別互相轉換的實例,
在socket在開發過程中,通常需要將一些具體的值(這些值可能是各種Java類型)轉換為byte[]類型,為此我總結瞭如下這個示例,貼出來,以便經常翻看:
public class TestCase { /** * short到字节数组的转换. */ public static byte[] shortToByte(short number) { int temp = number; byte[] b = new byte[2]; for (int i = 0; i < b.length; i++) { b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位 temp = temp >> 8;// 向右移8位 } return b; } /** * 字节数组到short的转换. */ public static short byteToShort(byte[] b) { short s = 0; short s0 = (short) (b[0] & 0xff);// 最低位 short s1 = (short) (b[1] & 0xff); s1 <<= 8; s = (short) (s0 | s1); return s; } /** * int到字节数组的转换. */ public static byte[] intToByte(int number) { int temp = number; byte[] b = new byte[4]; for (int i = 0; i < b.length; i++) { b[i] = new Integer(temp & 0xff).byteValue();// 将最低位保存在最低位 temp = temp >> 8;// 向右移8位 } return b; } /** * 字节数组到int的转换. */ public static int byteToInt(byte[] b) { int s = 0; int s0 = b[0] & 0xff;// 最低位 int s1 = b[1] & 0xff; int s2 = b[2] & 0xff; int s3 = b[3] & 0xff; s3 <<= 24; s2 <<= 16; s1 <<= 8; s = s0 | s1 | s2 | s3; return s; } /** * long类型转成byte数组 */ public static byte[] longToByte(long number) { long temp = number; byte[] b = new byte[8]; for (int i = 0; i < b.length; i++) { b[i] = new Long(temp & 0xff).byteValue();// 将最低位保存在最低位 temp = temp // >> 8;// 向右移8位 } return b; } /** * 字节数组到long的转换. */ public static long byteToLong(byte[] b) { long s = 0; long s0 = b[0] & 0xff;// 最低位 long s1 = b[1] & 0xff; long s2 = b[2] & 0xff; long s3 = b[3] & 0xff; long s4 = b[4] & 0xff;// 最低位 long s5 = b[5] & 0xff; long s6 = b[6] & 0xff; long s7 = b[7] & 0xff; // s0不变 s1 <<= 8; s2 <<= 16; s3 <<= 24; s4 <<= 8 * 4; s5 <<= 8 * 5; s6 <<= 8 * 6; s7 <<= 8 * 7; s = s0 | s1 | s2 | s3 | s4 | s5 | s6 | s7; return s; } /** * double到字节数组的转换. */ public static byte[] doubleToByte(double num) { byte[] b = new byte[8]; long l = Double.doubleToLongBits(num); for (int i = 0; i < 8; i++) { b[i] = new Long(l).byteValue(); l = l >> 8; } return b; } /** * 字节数组到double的转换. */ public static double getDouble(byte[] b) { long m; m = b[0]; m &= 0xff; m |= ((long) b[1] << 8); m &= 0xffff; m |= ((long) b[2] << 16); m &= 0xffffff; m |= ((long) b[3] << 24); m &= 0xffffffffl; m |= ((long) b[4] << 32); m &= 0xffffffffffl; m |= ((long) b[5] << 40); m &= 0xffffffffffffl; m |= ((long) b[6] << 48); m &= 0xffffffffffffffl; m |= ((long) b[7] << 56); return Double.longBitsToDouble(m); } /** * float到字节数组的转换. */ public static void floatToByte(float x) { //先用 Float.floatToIntBits(f)转换成int } /** * 字节数组到float的转换. */ public static float getFloat(byte[] b) { // 4 bytes int accum = 0; for ( int shiftBy = 0; shiftBy < 4; shiftBy++ ) { accum |= (b[shiftBy] & 0xff) << shiftBy * 8; } return Float.intBitsToFloat(accum); } /** * char到字节数组的转换. */ public static byte[] charToByte(char c){ byte[] b = new byte[2]; b[0] = (byte) ((c & 0xFF00) >> 8); b[1] = (byte) (c & 0xFF); return b; } /** * 字节数组到char的转换. */ public static char byteToChar(byte[] b){ char c = (char) (((b[0] & 0xFF) << 8) | (b[1] & 0xFF)); return c; } /** * string到字节数组的转换. */ public static byte[] stringToByte(String str) throws UnsupportedEncodingException{ return str.getBytes("GBK"); } /** * 字节数组到String的转换. */ public static String bytesToString(byte[] str) { String keyword = null; try { keyword = new String(str,"GBK"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return keyword; } /** * object到字节数组的转换 */ @Test public void testObject2ByteArray() throws IOException, ClassNotFoundException { // Object obj = ""; Integer[] obj = { 1, 3, 4 }; // // object to bytearray ByteArrayOutputStream bo = new ByteArrayOutputStream(); ObjectOutputStream oo = new ObjectOutputStream(bo); oo.writeObject(obj); byte[] bytes = bo.toByteArray(); bo.close(); oo.close(); System.out.println(Arrays.toString(bytes)); Integer[] intArr = (Integer[]) testByteArray2Object(bytes); System.out.println(Arrays.asList(intArr)); byte[] b2 = intToByte(123); System.out.println(Arrays.toString(b2)); int a = byteToInt(b2); System.out.println(a); } /** * 字节数组到object的转换. */ private Object testByteArray2Object(byte[] bytes) throws IOException, ClassNotFoundException { // byte[] bytes = null; Object obj; // bytearray to object ByteArrayInputStream bi = new ByteArrayInputStream(bytes); ObjectInputStream oi = new ObjectInputStream(bi); obj = oi.readObject(); bi.close(); oi.close(); System.out.println(obj); return obj; } }
感謝閱讀,希望能幫助大家,謝謝大家對本站的支持!
更多Java 基礎 byte[]與各種資料類型互相轉換的簡單範例相關文章請關注PHP中文網!

JVMmanagesgarbagecollectionacrossplatformseffectivelybyusingagenerationalapproachandadaptingtoOSandhardwaredifferences.ItemploysvariouscollectorslikeSerial,Parallel,CMS,andG1,eachsuitedfordifferentscenarios.Performancecanbetunedwithflagslike-XX:NewRa

Java代碼可以在不同操作系統上無需修改即可運行,這是因為Java的“一次編寫,到處運行”哲學,由Java虛擬機(JVM)實現。 JVM作為編譯後的Java字節碼與操作系統之間的中介,將字節碼翻譯成特定機器指令,確保程序在任何安裝了JVM的平台上都能獨立運行。

Java程序的編譯和執行通過字節碼和JVM實現平台獨立性。 1)編寫Java源碼並編譯成字節碼。 2)使用JVM在任何平台上執行字節碼,確保代碼的跨平台運行。

Java性能与硬件架构密切相关,理解这种关系可以显著提升编程能力。1)JVM通过JIT编译将Java字节码转换为机器指令,受CPU架构影响。2)内存管理和垃圾回收受RAM和内存总线速度影响。3)缓存和分支预测优化Java代码执行。4)多线程和并行处理在多核系统上提升性能。

使用原生庫會破壞Java的平台獨立性,因為這些庫需要為每個操作系統單獨編譯。 1)原生庫通過JNI與Java交互,提供Java無法直接實現的功能。 2)使用原生庫增加了項目複雜性,需要為不同平台管理庫文件。 3)雖然原生庫能提高性能,但應謹慎使用並進行跨平台測試。

JVM通過JavaNativeInterface(JNI)和Java標準庫處理操作系統API差異:1.JNI允許Java代碼調用本地代碼,直接與操作系統API交互。 2.Java標準庫提供統一API,內部映射到不同操作系統API,確保代碼跨平台運行。

modularitydoesnotdirectlyaffectJava'splatformindependence.Java'splatformindependenceismaintainedbytheJVM,butmodularityinfluencesapplicationstructureandmanagement,indirectlyimpactingplatformindependence.1)Deploymentanddistributionbecomemoreefficientwi

BytecodeinJavaistheintermediaterepresentationthatenablesplatformindependence.1)Javacodeiscompiledintobytecodestoredin.classfiles.2)TheJVMinterpretsorcompilesthisbytecodeintomachinecodeatruntime,allowingthesamebytecodetorunonanydevicewithaJVM,thusfulf


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器