我正在尝试将一个包含音乐文件的byte []传递给我应用中的另一个活动。但是,当我这样做时,我得到失败的活页夹错误意味着音乐文件的大小太大(超过2MB)。然后我继续尝试使用下面的方法压缩它,但仍然给了我错误。我如何获得1MB以下的文件以通过意图传递它还是有另一种方法来实现这一点而不使用意图?
压缩代码:
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;
}
答案 0 :(得分:2)
直接将文件作为参数传递给intent并不是一个好主意(或者是为什么意图设计的)。尝试压缩它是一种创可贴措施,如果限制发生变化或者文件本身需要更改为不适合压缩格式的文件,它将会中断。
您应该创建一个临时文件(或您可以从意图中引用的其他临时存储),并通过您的意图传递对它的引用。静态成员可能会起作用,但是你必须非常小心,不要长时间保持引用,否则可能导致内存泄漏。