2014-03-06 1 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() (예제에서)는 오디오 데이터의 바이트 중 * all *에 대한 액세스 권한을 제공합니까? 그렇다면 무엇 때문에 왜 버퍼링해야합니까? (현재 'currentFile'이 무엇인지 알면 도움이됩니다.) – Paul

답변

0

내 견해로는 코드가 작동하지 않고 IndexOutOfBoundsException을 발생시킵니다. 타겟 배열 buffer의 위치를 ​​확인하십시오.

while 루프의 첫 번째 반복에서 오프셋은 0이고 위치는 0에서 65535입니다. 두 번째 반복에서는 65536 * offset = 1로 작성합니다. 따라서 buffer[65536] 위에서 언급 한 예외가 발생합니다.

나머지 데이터에 대한 질문 ...이 또한 작동하지 않아야합니다 : 코드는 항상 소스에서 대상 배열로 고정 길이가 65536 바이트를 복사합니다. srcPos + length> src.length 조건으로 소스 배열의 한 위치에 도달하면 IndexOutOfBoundsException을 갖게됩니다.

+0

답변 주셔서 감사합니다. 그것을 고정^^ 지금 arraycopy에 대한 이유가 필요해. – bitQUAKE