Запись файла на Android с помощью Okio

Привет всем! Я читаю необработанный звук с устройства Android и хочу записать его в файл с помощью Okio следующим образом:

BufferedSink sink = Okio.buffer(Okio.sink(file));

У меня есть обратный вызов для извлечения аудиоданных, а затем записать аудиоданные в bufferedSink

@Override
public void onAudioData(byte[] data) {
    sink.write(data);
}

Но иногда, когда я слушаю аудиофайл, последние кадры отсутствуют, и все файлы имеют длину 8182 байта или кратно.

Если я использую FileOutputStream, то все работает хорошо, но это первый подход, и моя будущая цель - потоковая передача аудио с использованием Okio Pipes и OkHttp. Кто-нибудь знает, почему это происходит?

1 ответ

Решение

Ваш код не показывает полное использование sink, но кажется, что вы не закрываете его, когда закончите. Из-за этого на диск записываются только те внутренние сегменты (длина которых составляет 8192 байта, так что размер вашего файла должен быть кратным этому числу), которые заполнены, а последний - нет. В качестве решения вы должны close() на ваше Sink,

Другие вопросы по тегам