gpt4 book ai didi

java - Android GZIP 解压缩在缓冲区限制处破坏 unicode 字符

转载 作者:太空狗 更新时间:2023-10-29 16:11:53 25 4
gpt4 key购买 nike

我将接收到的 GZIP 压缩数据解压缩为字符串。当我将 BUFFER_SIZE 设置为 512 时出现问题,它会在缓冲区限制点处破坏 unicode 字符。结果我得到带问号的文本。它发生在非拉丁字母上。

...во и ��ргуме...

public static String decompress(byte[] compressed) throws IOException {
final int BUFFER_SIZE = 512;
ByteArrayInputStream is = new ByteArrayInputStream(compressed);
GZIPInputStream gis = new GZIPInputStream(is, BUFFER_SIZE);
StringBuilder string = new StringBuilder();
byte[] data = new byte[BUFFER_SIZE];
int bytesRead;
while ((bytesRead = gis.read(data)) != -1) {
string.append(new String(data, 0, bytesRead));
}
gis.close();
is.close();
return string.toString();
}

最佳答案

错误出在算法中,假设正在读取的 block 在 UTF-8 字节序列边界上结束(和开始)。

那么按照下面的方式来做:

    ByteArrayInputStream is = new ByteArrayInputStream(compressed);
GZIPInputStream gis = new GZIPInputStream(is, BUFFER_SIZE);
byte[] data = new byte[BUFFER_SIZE];
int bytesRead;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ((bytesRead = gis.read(data)) != -1) {
baos.write(data, 0, bytesRead);
}
gis.close();
is.close();
return baos.toString("UTF-8");

关于java - Android GZIP 解压缩在缓冲区限制处破坏 unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44801195/

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