Вот что я сделал на данный момент:< /p>
Разбор заголовка: сначала я читаю и анализирую заголовок в формате:
Код: Выделить всё
MIME:audio/mp4;SIZE:3427;NAME:voice_message.mp4
Получение двоичного аудио Данные: после анализа заголовка я переключаюсь на получение необработанных двоичных аудиоданных частями и записываю их в файл.
Замеченная проблема:
двоичные данные (содержимое аудиофайла) в некоторых случаях воспринимаются как текстовые сообщения, что приводит к искажению содержимого в пользовательском интерфейсе чата.
Мои журналы показывают следующее неожиданное поведение:
- Заголовки анализируются и регистрируются правильно.
- Двоичные аудиоданные регистрируются как строка, в которой отображаются поврежденные/искаженные символы.
- Список сообщений в пользовательском интерфейсе содержит сочетание действительных заголовков и двоичных данных как текст.
Получение данных:
Код: Выделить всё
private void handleIncomingData(byte[] buffer, int bytes) {
String incomingData = new String(buffer, 0, bytes);
if (!isReceivingAudio && incomingData.startsWith("MIME:")) {
// Parse header...
isReceivingAudio = true;
} else if (isReceivingAudio) {
// Write binary audio data to file...
} else {
// Handle text messages...
}
}
Код: Выделить всё
private void receiveAudioFile(String fileName, int fileSize, String mimeType) {
try (FileOutputStream fileOutputStream = new FileOutputStream(receivedFile)) {
byte[] buffer = new byte[1024];
int totalBytesRead = 0, bytesRead;
while (totalBytesRead < fileSize && (bytesRead = inputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, bytesRead);
totalBytesRead += bytesRead;
}
// Broadcast success or error...
}
}
При получении аудиоданных в журналах правильно отображается заголовок:
Код: Выделить всё
MIME:audio/mp4;SIZE:3427;NAME:voice_message.mp4
Код: Выделить всё
??????ftypmp42?????isommp42????moov????mdat???? ...
Вопросы:
[*]Как я могу гарантировать, что двоичные данные обрабатываются отдельно от текстовых сообщений во время связи Bluetooth?
[*]
Какие действия можно предпринять, чтобы правильно синхронизировать переход от обработки заголовка к записи двоичных данных?
Есть ли какие-либо распространенные ошибки при обработке смешанных данных (текстовых и двоичных) через сокеты Bluetooth, которые я могу упустить?
Подробнее здесь: https://stackoverflow.com/questions/793 ... f-properly