Android 将数据从 ByteBuffer 存储到 Storage

Posted

技术标签:

【中文标题】Android 将数据从 ByteBuffer 存储到 Storage【英文标题】:Android Store data from ByteBuffer to Storage 【发布时间】:2017-08-23 05:12:47 【问题描述】:

我正在使用第三方 sdk 广播流,添加回调后,我成功获得了音频的 ByteBuffer,但是当我将其保存到 sdcard 时无法播放。

这是我的代码的 sn-p

    long startedTime = -1;

    @Override
    public void onAudioBuffer(ByteBuffer byteBuffer, int i, long l) 
        if (bufferedOutputStream == null)
            createFile();
        Log.e(TAG, "i:" + i);
        Log.e(TAG, "l:" + l);
        Log.e(TAG, "byteBuffer capacity:" + byteBuffer.capacity());
        Log.e(TAG, "byteBuffer length:" + byteBuffer.array().length);
        if (startedTime == -1) 
            startedTime = System.currentTimeMillis();
            createFile();
         else if (System.currentTimeMillis() - startedTime > 10000) 
            try 
                bufferedOutputStream.close();
                startedTime = -1;
             catch (IOException e) 
                Log.e(TAG, "byteBuffer bufferedOutputStream closing err:" + e.getMessage());
                e.printStackTrace();
            
            return;
         else 
            try 
                byte[] bytes = new byte[byteBuffer.capacity()];
                byteBuffer.get(bytes, 0, bytes.length);
                bufferedOutputStream.write(bytes);
                byteBuffer.clear();
             catch (IOException e) 
                Log.e(TAG, "byteBuffer bufferedOutputStream writhing err:" + e.getMessage());
                e.printStackTrace();
            
        
    

【问题讨论】:

【参考方案1】:

尝试改变这个:-

try 
            byte[] bytes = new byte[1024];
            byteBuffer.get(bytes, 0, bytes.length);

            bufferedOutputStream.write(bytes);

         catch (IOException e) 
            Log.e(TAG, "byteBuffer bufferedOutputStream writhing err:" + e.getMessage());
            e.printStackTrace();
        

在操作或全部复制后最终关闭byteBuffer。

【讨论】:

同样的问题无法播放文件 写入文件时没有错误,唯一的问题是我无法播放mp3文件 你是如何创建文件的?寻找扩展和所有

以上是关于Android 将数据从 ByteBuffer 存储到 Storage的主要内容,如果未能解决你的问题,请参考以下文章

玩转 ByteBuffer

Android jni 数据类型丢失精度(ByteBuffer,int)

如何从 ByteBuffer 中提取使用过的字节数组?

如何在android的MediaCodec上下文中使用ByteBuffer

来自 NIO Direct ByteBuffer 的 Android RenderScript 分配副本

从 ByteBuffer 读取前四个字节,然后将它们写回?