2014-03-06 40 views
0

我試圖通過一個大小爲65536字節的緩衝區流式傳輸音頻。Java System.arraycopy數組邊界

如果我將一段音頻數據複製到緩衝區System.arraycopy()並且剩餘的音頻數據小於65536,會發生什麼?它會拋出一個錯誤還是會將剩餘的字節複製到緩衝區中而沒有任何錯誤?

這是我的代碼現在:

int offset = 0; 
while(isAudioActive) 
{ 

    byte[] buffer = new byte[65536]; 
    System.arraycopy(this.currentFile.getSampledata().getData(), 65536 * offset, buffer, 65536 * offset, 65536); 

      //<<writing Audio to track here>> 
    offset++; 
} 

所以系統拷貝音頻數據到小件的緩衝。 我正在使用小片,因爲我想稍後暫停/停止音樂。

+0

你嘗試執行它嗎? –

+3

或閱讀文檔? –

+0

據推測,getData()(在你的例子中)是讓你訪問你的音頻數據的*全部*字節?如果是這樣,爲什麼你需要緩衝任何東西? (順便說一下,這將有助於瞭解'currentFile'是什麼。) – Paul

回答

0

從我的角度來看,代碼將無法工作並拋出IndexOutOfBoundsException。請檢查您的目標陣列buffer中的位置。

在while循環偏移量的第一次迭代中爲0,並且您正在寫入位置0到65535.在第二次迭代中,您正在寫入位置65536 *偏移量,偏移量爲1.因此,您從buffer[65536]開始這導致了上述例外。

關於剩餘數據的問題......這也應該不起作用:您的代碼始終從源到目標數組複製一個固定長度的65536字節。您可能會在條件srcPos + length> src.length的情況下在源數組中找到一個位置,那麼您也將有一個IndexOutOfBoundsException。

+0

感謝您的答案。修正它^^現在需要一個數組拷貝的原因。 – bitQUAKE