Передача больших объемов данных по Bluetooth на Android Gingerbread

Я пытаюсь передать около мегабайта произвольных данных за раз с одного телефона Android на другой. В настоящее время я записываю размер, код команды и данные в DataOutputStream вокруг BufferedOutputStream , вокруг OutputStream , возвращенного из bluetoothSocketInstance.getOutputStream ( ) .

Принимающий телефон считывает размер и код команды, а затем считывает данные из входного потока, пока не получит все ожидаемые данные. Это работает для коротких строк, но для больших файлов передаются не все данные. Запуск приложения в отладчике показывает, что запись возвращается без каких-либо исключений, а при чтении считывается часть ожидаемых байтов, а затем выполняется блокировка на неопределенный срок. Он также не генерирует никаких исключений.

Есть ли где-нибудь буфер, который заполняется? Что еще мне нужно сделать, чтобы обеспечить передачу всех данных?

Мои коды отправителя и получателя приведены ниже:

Отправитель:

  try {

            DataOutputStream d = new DataOutputStream(new BufferedOutputStream(mmOutStream,buffer.length+8));
            //int b= buffer.length;
            d.writeInt(buffer.length);
            d.writeInt(command);

            d.write(buffer);
            d.flush();

        } catch (IOException e) {
            Log.e(TAG, "Exception during write", e);
        }
    }

Получатель:

 try {

                // Read from the InputStream
                int messageSize= inStream.readInt();
                int messageCode = inStream.readInt();
                bytes=0;
                buffer =new byte[messageSize];
                while(bytes < messageSize)
                {
                    bytes += inStream.read(buffer,bytes,messageSize - bytes);

                }
                    message = bytes;
            } catch (IOException e) {
                Log.e(TAG, "disconnected", e);
                connectionLost();
                break;
            }
5
задан ethan 11 November 2011 в 19:07
поделиться