2016-03-01 67 views
1

單元測試:用設置一個字節數組屏障。如果在測試框架的任何邊界被觸摸時,單元測試應該會失敗,如下面的代碼片段:Java:引用字節子陣列

byte[] memory = new byte[Size + 2]; 

/* Poison barriers. Failure in case of touch! */ 
memory[0]  = 0x5A; 
memory[Size-1] = 0xA5; 

... 
    array = sub-array of memory[] from '1 to Size-2' 
    test functions on array 
... 
/* Check if boarders have been touched. */ 
hwut_verify(memory[0]  == 0x5A); 
hwut_verify(memory[Size-1] == 0xA5); 

我怎麼能拿子陣列,實際上是位於原始字節數組裏面?

+1

您可以通過使用'System.arraycopy'複製,但(如果你喜歡或指針),你不能得到一個參考子陣列。爲此,您可以使用'ByteBuffer'而不是'byte []' – stjepano

回答

2

在Java中,一個byte []有一個包含它的最大長度的標題。這意味着你不能得到一個子字節[],因爲它不會是一個對象。

你可以做什麼用的ByteBuffer

ByteBuffer bb = ByteBuffer.wrap(byteArray); 
ByteBuffer portion = bb.position(10).limit(20).slice(); 
+0

'部分'的任何操作是否會影響'byteArray'? –

+0

@ Frank-ReneSchäfer您可以獨立更改「部分」的位置和限制,但是如果您在該區域中寫入字節,則兩者都可見。即他們實際上在say數組上工作。注意:ByteBuffer也支持堆內存。 –