Я пытаюсь передать около мегабайта произвольных данных за раз с одного телефона 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;
}