java - C++和Java之间如何压缩和解压?

标签 java c++ inflate compression

全部

我遇到了在 java 和 C++ 之间压缩和解压缩的问题。

这是在服务器上运行的 Java 代码。

public static byte[] CompressByDeflater(byte[] toCompress) throws IOException
{
    ByteArrayOutputStream compressedStream = new ByteArrayOutputStream();
    DeflaterOutputStream inflater = new DeflaterOutputStream(compressedStream);
    inflater.write(toCompress, 0, toCompress.length);
    inflater.close();

    return compressedStream.toByteArray();
}

public static byte[] DecompressByInflater(byte[] toDecompress) throws IOException
{
    ByteArrayOutputStream uncompressedStream = new ByteArrayOutputStream();
    ByteArrayInputStream compressedStream = new ByteArrayInputStream(toDecompress);
    InflaterInputStream inflater = new InflaterInputStream(compressedStream);

    int c;
    while ((c = inflater.read()) != -1)
    {
        uncompressedStream.write(c);
    }

    return uncompressedStream.toByteArray();
}

我从服务器收到一个二进制文件。

然后我必须使用 C++ 解压缩它。

我从哪里开始?

最佳答案

您的压缩程序使用 zlib(参见 JDK documentation),因此您需要使用 C++ zlib 库来解压缩其输出。

zlib documentation是开始的地方。

关于java - C++和Java之间如何压缩和解压?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22267583/

相关文章:

C++ 从文件中读取会阻止任何进一步的写入。为什么?

C++ OpenGL 游戏菜单链接对象

android - 将 Drawable 对象放置在 Android fragment 中布局的 View 中

java - 如何在Java Rest API中获取InputStream文件的真实路径

java - java中对象的单纯名称意味着什么(Array,ArrayList)

java - JTASessionContext 与 JDBCTransactionFactory 一起使用;自动刷新将无法与 getCurrentSession() 一起正确运行

java - Hibernate Batch Cascade 删除集合

c++ - 友元函数的参数依赖查找

c - 在zlib.h中使用inflate在client中使用server发送的解压包时初始化z_stream.avail_out的值

algorithm - IDAT PNG block ,第一个字节意外,我哪里错了?