java - Android Deflator 内存不足错误

标签 java android zlib

我想在保存到文件之前压缩字节数组。 当我使用 Deflator 压缩字节数组时,出现 OutOfMemoryError:

ERROR/dalvikvm-heap(16065): Out of memory on a 921616-byte allocation.

I check the code and it is the same as android developer 。但我添加了 DeflatorOutputStream 来减少内存使用。

我的代码:

public static byte[] compress(byte[] data) throws IOException {

    Deflater deflater = new Deflater();
    deflater.setInput(data);
    deflater.finish();

    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
    DeflaterOutputStream dos=new DeflaterOutputStream(outputStream);

    byte[] buffer = new byte[1024];
    while (!deflater.finished()) {
        int count=deflater.deflate(buffer); 
        // returns the generated code... index
        dos.write(buffer, 0, count);
    }

    deflater.end();
    byte[] output = outputStream.toByteArray();

    dos.finish();
    dos.close();
    outputStream.close();

    return output;
}

我检查了这一行发生了错误:int count=deflater.deflate(buffer);

最佳答案

我认为有一个更简单的解决方案:

public static byte[] compress(byte[] data) throws IOException {
    ByteArrayOutputStream bout = new ByteArrayOutputStream(data.length);
    try (DeflaterOutputStream out = new DeflaterOutputStream(bout)) {
        out.write(data);
    }

    return bout.toByteArray();
}

关于java - Android Deflator 内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20197859/

相关文章:

android - 在 Android 上收听音量变化事件

javascript - Node.js:tcp 连接中的 zlib 压缩

c - 无法提取根据 IETF RFC 1951 : "DEFLATE Compressed Data Format Specification version 1.3" 压缩的数据

java - 指定对 DAO 方法的排序

android - Robolectric:如何从 Assets 中修复 FileNotFoundException?

java - 设置 JFreeChart 上 Y 轴的格式

android-TextView setGravity 不工作

c++ - Zlib C++ boost 套接字数据

java - jetty maven Artifact 是jboss-jetty吗?

java - SwingWorker 任务上的execute() 出现奇怪的结果