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"というエラーが表示されます。私はより大きなintにbufferSizeを設定する必要がありますか? –

+1

問題が解決しました。 –

関連する問題