java - 在android Activity 之间传递字节数组

标签 java android

我正在尝试将保存音乐文件的字节[]传递给我的应用程序中的另一个 Activity 。但是当我这样做时,我收到失败的绑定(bind)器错误,这意味着音乐文件的大小太大(超过 2MB)。然后我继续尝试用下面的方法压缩它,但这仍然给了我错误。我怎样才能获得小于 1MB 的文件以通过 Intent 传递它,或者是否有其他方法可以在不使用 Intent 的情况下实现此目的?

压缩代码:

public static byte[] zipByteArray(byte[] file)
            throws IOException{
        byte[] byReturn = null;
        Deflater oDeflate = new Deflater(Deflater.DEFLATED, false);
        oDeflate.setInput(file);
        oDeflate.finish();
        ByteArrayOutputStream oZipStream = new ByteArrayOutputStream();
        try {
            while (! oDeflate.finished() ){
                byte[] byRead = new byte[ZIP_BUFFER_SIZE];
                int iBytesRead = oDeflate.deflate(byRead);
                if (iBytesRead == byRead.length){
                    oZipStream.write(byRead);
                }
                else {
                    oZipStream.write(byRead, 0, iBytesRead);
                }
            }
            oDeflate.end();
            byReturn = oZipStream.toByteArray();
        }
        finally {
            oZipStream.close();
        }
        return byReturn;
    }

最佳答案

将文件作为参数直接传递给 Intent 并不是一个好主意(或者 Intent 的设计目的)。尝试压缩它是一种创可贴措施,如果限制发生变化或文件本身需要更改为不适合您的压缩格式的文件,该措施就会失效。

您应该创建一个临时文件(或您可以从 Intent 引用的其他临时存储),并通过您的 Intent 传递对它的引用。静态成员可能会起作用,但您必须非常小心,不要将引用保留太久,否则可能会导致内存泄漏。

关于java - 在android Activity 之间传递字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28684858/

相关文章:

java - 调用静态 JNI 方法以从 C++ 返回字符串

android - HereMaps 中的 map 标记方向

android - 未解析的 aapt 错误!

Java 2D 性能缓慢 - 调整大小

java - Spring 多部分文件最大大小

java - 将数字存储在堆栈中并将其打印在队列中

java - 如何只向某人发送邮件?

java - 在将对象插入数组列表之前,如何删除 java 中对象的重复属性

android - 保存 fragment 状态或保存文件并从中更新 - Android

android - 从 github 拉取最新代码到 Android Studio