gpt4 book ai didi

java - Java 中 Qt qCompress 的等价物

转载 作者:搜寻专家 更新时间:2023-11-01 03:20:54 24 4
gpt4 key购买 nike

我有基于 Qt 的客户端-服务器应用程序。客户端应用程序使用 qCompress 调用压缩数据,服务器使用 qUncompress 方法解压缩数据。

我现在需要用 Java 编写一个与同一服务器通信的新客户端应用程序。为了正确解压缩,我需要确保使用与 qCompress 相同的压缩方式。

浏览网络,似乎 Qt 可能正在使用 zip 压缩。我查看了 java zip 相关类。但是,我不确定它是否会起作用。例如,ZipEntry 构造函数需要一个名称作为参数。但是,Qt 不需要任何名称作为参数。

如果您能确认 Java zip 类是否与 Qt 压缩/解压缩兼容,我将不胜感激。如果它们是兼容的,那么我的 ZipEntry 构造函数的参数值是多少?问候。

最佳答案

据我所知没有库,但是您可以使用 java.util.zip.Deflater 压缩数据并在字节数组的开头添加未压缩数据的大小:

import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.zip.DataFormatException;
import java.util.zip.Deflater;

final int MAX_DATA = 1024;
final int SIZE_LENGTH = 4;

// Input data
byte[] uncompressed = "hello".getBytes(Charset.forName("UTF-8"));

// This is simplistic, you should use a dynamic buffer
byte[] buffer = new byte[MAX_DATA];

// Add the uncompressed data size to the first 4 bytes
ByteBuffer.wrap(buffer, 0, SIZE_LENGTH).putInt(uncompressed.length);

// Compress it
Deflater deflater = new Deflater();
deflater.setInput(uncompressed);
deflater.finish();
// Write past the size bytes when compressing
int size = deflater.deflate(buffer, SIZE_LENGTH, buffer.length - SIZE_LENGTH);
// TODO maybe check the returned size value to increase the buffer size?
if (!deflater.finished()) throw new DataFormatException("Buffer size exceeded");

// Compressed data that can be consumed by qUncompress
byte[] compressed = Arrays.copyOf(buffer, SIZE_LENGTH + size);

关于java - Java 中 Qt qCompress 的等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30898573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com