Запись файла на Android с помощью Okio - PullRequest
0 голосов
/ 29 июня 2018

Привет, все. Я читаю необработанный звук с устройства 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 Ответ

0 голосов
/ 02 июля 2018

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

...