0

내 앱이 데이터 (문자열 또는 바이트)를 Bluetooth를 통해 다른 앱 복사본으로 보냅니다. 이 오류를 큰 텍스트 또는 바이트 []를 보내고 얻을려고 :ArrayIndexOutOfBoundsException 버퍼에서 읽을 때

FATAL EXCEPTION: Thread-8297 
     java.lang.ArrayIndexOutOfBoundsException: length=1024; index=1024 
      at com.ramimartin.multibluetooth.bluetooth.BluetoothRunnable.run(BluetoothRunnable.java:147) 
      at java.lang.Thread.run(Thread.java:841) 

그래서, 이유는 무엇입니까? 라인

BluetoothRunnable.java:147

에서 코드는 다음과 같습니다

while(bytesRead == bufferSize && buffer[bufferSize] != 0) { 

전체 코드 :

 int bufferSize = 1024; 
     int bytesRead; 
     byte[] buffer = new byte[bufferSize]; 
        try { 
         if(this.mInputStream != null) { 
          bytesRead = this.mInputStream.read(buffer); 
          ByteBuffer bbuf = ByteBuffer.allocate(bytesRead); 
          if(bytesRead != -1) { 
           while(bytesRead == bufferSize && buffer[bufferSize] != 0) { 
            bbuf.put(buffer, 0, bytesRead); 
            if(this.mInputStream == null) { 
             return; 
            } 

            bytesRead = this.mInputStream.read(buffer); 
           } 

           bbuf.put(buffer, 0, bytesRead); 
          } 

          EventBus.getDefault().post(new BluetoothCommunicatorBytes(bbuf.array())); 
          continue; 
         } 
        } catch (IOException var8) { 
         Log.e(TAG, "===> Error Received Bytes IOException : " + var8.getMessage()); 
         continue; 
        } 
+0

Java 배열은 인덱스가 0입니다. – azurefrog

답변

0

이 있어야한다 :

while(bytesRead == bufferSize && buffer[bufferSize - 1] != 0) 

또한 시간이있을 수 있습니다 때 BUFFERSIZE 전 1.

보다 S 및 어레이를 판독하는 방법은 다음

int arr[] = new int[10]; 

는 상기 경우에 최대 인덱스 될 것이다

arr[9] 

인덱스 0에서 시작한다.

+0

좋아, 이제 시도해 보겠습니다. –

+0

그래서 예제를 시도했지만, 이제는 "bbuf.put (buffer, 0, bytesRead);"코드에 "java.nio.BufferOverflowException"오류가 발생합니다. " bufferSize를 더 큰 int로 설정해야합니까? –

+1

문제가 해결되었습니다. –