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