在與嵌入式設備通訊的過程中使用的socket通訊 獲取的字節流,通常轉換為字節數組,需要根據協議將字節數組拆分。對於有規律的重復拆分可以使用,由於java中不能像c中直接進行內存操作例如使用struct 內存拷貝可以直接實現,這里考慮的是借用數組拷貝的方式來實現。
java數組復制參考 引自百度空間 同時參考 數組拷貝之java.lang.System.arraycopy和java.util.Arrays.copyOf方法
java數組復制的4種方式,java數組拷貝問題 JAVA數組的復制是引用傳遞,而並不是其他語言的值傳遞。 這里介紹java數組復制的4種方式極其問題: 第一種方式利用for循環: int[] a={1,2,4,6}; int length=a.length; int[] b=new int[length]; for (int i = 0; i < length; i++) { b[i]=a[i]; } 第二種方式直接賦值: int[] array1={1,2,4,6}; int[] array2=a; 這里把array1數組的值復制給array2,如果你這樣去運行,就會發現此時兩個數組的值是一樣的。把array2=array1;替換為System.arraycopy(array1, 0, array2, 0, array1.length);就能把array1中的數值復制給array2,而兩者並不指向同樣的地址。 第三種方式:利用Arrays自帶的copyof int copy[] = Arrays.copyOf(a, a.length); 第四種方式:System.arraycopy
這里再介紹一下System.arraycopy這個函數,從JAVA API中找了一段。大家看一下。 public static voidarraycopy(Object src, int srcPos, Object dest, int destPos, int length)從指定源數組中復制一個數組,復制從指定的位置開始,到目標數組的指定位置結束。從src引用的源數組到dest引用的目標數組,數組組件的一個子序列被復制下來。被復制的組件的編號等於length參數。源數組中位置在srcPos到srcPos+length-1之間的組件被分別復制到目標數組中的destPos到destPos+length-1位置。 如果參數src和dest引用相同的數組對象,則復制的執行過程就好像首先將srcPos到srcPos+length-1位置 的組件復制到一個帶有length組件的臨時數組,然后再將此臨時數組的內容復制到目標數組的destPos到 destPos+length-1位置一樣。 If 如果dest為null,則拋出NullPointerException異常。 如果src為null, 則拋出NullPointerException異常,並且不會修改目標數組。 否則,只要下列任何情況為真,則拋出ArrayStoreException異常並且不會修改目標數組: src參數指的是非數組對象。 dest參數指的是非數組對象。 src參數和dest參數指的是那些其組件類型為不同基本類型的數組。 src參數指的是具有基本組件類型的數組且dest參數指的是具有引用組件類型的數組。 src參數指的是具有引用組件類型的數組且dest參數指的是具有基本組件類型的數組。 否則,只要下列任何情況為真,則拋出IndexOutOfBoundsException異常,並且不會修改目標數組: srcPos參數為負。 destPos參數為負。 length參數為負。 srcPos+length大於src.length,即源數組的長度。 destPos+length大於dest.length,即目標數組的長度。 否則,如果源數組中srcPos到srcPos+length-1位置上的實際組件通過分配轉換並不能轉換成目標數組的組 件類型,則拋出ArrayStoreException異常。在這種情況下,將k設置為比長度小的最小非負整數,這樣就 無法將src[srcPos+k]轉換為目標數組的組件類型;當拋出異常時,從srcPos到srcPos+k-1位置上的源數組 組件已經被復制到目標數組中的destPos到destPos+k-1位置,而目標數組中的其他位置不會被修改。(因 為已經詳細說明過的那些限制,只能將此段落有效地應用於兩個數組都有引用類型的組件類型的情況。) 參數:src- 源數組。 srcPos- 源數組中的起始位置。 dest- 目標數組。 destPos- 目標數據中的起始位置。 length- 要復制的數組元素的數量。 拋出:IndexOutOfBoundsException- 如果復制會導致對數組范圍以外的數據的訪問。 ArrayStoreException- 如果因為類型不匹配而使得無法將src數組中的元素存儲到dest數組中。 NullPointerException- 如果src或dest為null。