使用 Okio 在 Android 上写入文件
Writing file on Android with 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 流式传输音频。有谁知道为什么会这样?
您的代码没有显示 sink
的完整用法,但您似乎并没有在完成后关闭它。因此,只有那些已满的内部段(长度为 8192 字节,因此您的文件大小应该是该数字的倍数)才会写入磁盘,而最后一个则不会。
作为解决方案,您应该 close()
您的 Sink
.
大家好我正在从 Android 设备读取原始音频,我想使用 Okio 将其写入文件,如下所示:
BufferedSink sink = Okio.buffer(Okio.sink(file));
我有一个回调来获取音频数据,然后将音频数据写入bufferedSink
@Override
public void onAudioData(byte[] data) {
sink.write(data);
}
但有时,当我收听音频文件时,最后几帧丢失,所有文件的长度都是 8182 字节或倍数。
如果我使用 FileOutputStream 一切正常,但这是第一种方法,我未来的目标是使用 Okio Pipes 和 OkHttp 流式传输音频。有谁知道为什么会这样?
您的代码没有显示 sink
的完整用法,但您似乎并没有在完成后关闭它。因此,只有那些已满的内部段(长度为 8192 字节,因此您的文件大小应该是该数字的倍数)才会写入磁盘,而最后一个则不会。
作为解决方案,您应该 close()
您的 Sink
.