0

以下のコードを使用して、接続されたソケットからデータを読み取ります。System.arraycopy(tempBuffer、0、buffer、0、byteRead)コードを実行した後、バッファー変数で受信するデータの長さは41バイトです。送信システムは43バイトを送信しています。arraycopyが他のバイトを切り刻んでいる理由を知っている人はいますか?

public class BluetoothClientSocket{
     private class ConnectedThread extends Thread {

          private final BluetoothSocket mmSocket;
          private final InputStream mmInStream;
          private final OutputStream mmOutStream;

         public ConnectedThread(BluetoothSocket socket) {
               mmSocket = socket;
               InputStream tmpIn = null;
               OutputStream tmpOut = null;

        // Get the BluetoothSocket input and output streams
        try {
            tmpIn = socket.getInputStream();
            tmpOut = socket.getOutputStream();
        } catch (IOException e) {
            //handle exception logic
            }

            mmInStream = tmpIn;
            mmOutStream = tmpOut;
          }

         public void run(){
             byte[] tempBuffer = new byte[1024];
             byte[] buffer = null;
             int byteRead;

             while (true) {
                try {
                        InputStream itStrm = mmInStream;
                        byteRead = mmInStream.read(tempBuffer);
                        if(byteRead > 0){
                             buffer = new byte[byteRead];
                             System.arraycopy(tempBuffer, 0, buffer, 0, byteRead);
                        }
                   }
                   catch(Exception ex){
                       //handle exception logic
                   }
              }
          }
     }
}
4

1 に答える 1

6

送信システムは43バイトを送信しています。

これは、への1回の呼び出しで43バイトすべてを受信して​​いるという意味ではありませんread

arraycopyが他のバイトを切り刻んでいる理由を知っている人はいますか?

そうではありません。これは41であることがわかると思います。これは、関与byteReadする前に「問題」が発生することを意味します。arraycopy

の次の呼び出しで、残りの2バイト(および、もう一方の端がこれ以上送信した場合は、さらに多くのデータ)を取得することを期待しますread

それかあなたのコードのどちらかが反対側で間違っていて、あなたは最初に41バイトしか送っていません。

于 2012-07-24T19:11:27.697 に答える