gpt4 book ai didi

Java数据流解压

转载 作者:太空宇宙 更新时间:2023-11-04 08:14:06 25 4
gpt4 key购买 nike

从套接字(缓冲区)获取数据

BufferedReader is = new BufferedReader(new InputStreamReader(download.getInputStream()));

数据解压

Inflater decompresser = new Inflater();
decompresser.setInput(buffer.toString().getBytes());
byte[] dataBytes = new byte[8388608];
int resultLength = decompresser.inflate(dataBytes);
decompresser.end();
System.out.println("decompressed" + new String(dataBytes, 0, resultLength)+ " RESULTLENGHT " +resultLength);

发送 1000 字节,压缩 ZLIB 和轮次(800-900 字节)但我不知道发送的具体大小是多少。我需要一次从套接字读取 1 个字节并立即解压它,直到解压数据的总大小等于 1000 字节。

为了一次读取一个字节,我这样做:

StringBuilder buffer = new StringBuilder();
StringBuilder unpackbuffer = new StringBuilder();
do buffer.append((char)is.read());
while(buffer.charAt(buffer.length()-1) != '|' && (byte)buffer.charAt(buffer.length()-1) != -1);

如何填写这个循环解包缓冲区?并检查它的大小?抱歉,我希望我的问题很清楚。

最佳答案

好的,如果您无法将长度添加到要发送的数据中,然后在另一端读入(如果您能够设计允许这样做的协议(protocol),这显然是最简单的理想解决方案),那么您可以“逐字节”压缩流。技巧是创建一个 1 字节缓冲区作为输入缓冲区。代码如下所示:

    Inflater infl = new Inflater();
byte[] buf = new byte[1];
byte[] outputBuf = new byte[512];
while (!infl.finished()) {
while (infl.needsInput()) {
buf[0] = ...next byte from stream...
infl.setInput(buf);
}
int noUnc = infl.inflate(outputBuf);
// the first "noUnc" bytes of outputBuf contain the next bit of data
}

关于Java数据流解压,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729685/

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