Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在gzip时创建X大小的字符串?_String_Algorithm_Gzip - Fatal编程技术网

String 如何在gzip时创建X大小的字符串?

String 如何在gzip时创建X大小的字符串?,string,algorithm,gzip,String,Algorithm,Gzip,我正在尝试创建一个服务调用getBytes(x)其中x是以字节为单位的响应体的大小。问题是我无法关闭服务器响应的gzip。因此,我需要弄清楚如何创建一个字符串,当gzip被压缩时,该字符串的大小为x字节。我的字符串是1个字符=1个字节。关于如何做到这一点,有什么建议吗?暴力方法是在字符串中添加1个随机字节,gzip it,测量长度,直到它是x 为了改进它,您可以进行二进制搜索—如果增量小于所需值,则将添加到字符串中的增量大小加倍;如果增量字符串太大,则将要添加的增量字符串的大小除以2,每次都应随

我正在尝试创建一个服务调用
getBytes(x)
其中
x
是以字节为单位的响应体的大小。问题是我无法关闭服务器响应的gzip。因此,我需要弄清楚如何创建一个字符串,当gzip被压缩时,该字符串的大小为
x
字节。我的字符串是1个字符=1个字节。关于如何做到这一点,有什么建议吗?

暴力方法是在字符串中添加1个随机字节,gzip it,测量长度,直到它是x


为了改进它,您可以进行二进制搜索—如果增量小于所需值,则将添加到字符串中的增量大小加倍;如果增量字符串太大,则将要添加的增量字符串的大小除以2,每次都应随机生成要追加的增量字符串。

您不能总是精确地得到X,但可以在几个字节内得到。这是如何做到这一点的一个例子。它使用三个压缩过程,中间使用两个解压缩。解压过程最多可处理X个压缩字节或略少于X个压缩字节,以查看在下一次压缩过程中要输入多少未压缩数据。

是否需要精确?如果不是,误差是多少?是的,它需要精确。它不可能总是精确的。在某些情况下,输出少了一个字节,但向输入添加一个字节会向输出添加两个字节。为什么要处理压缩响应体?这通常由HTTP在内部处理。如果还从该级别后退,那么在处理应用程序级响应流时很容易获得“正确的大小”。此外,多个gzip/deflate实现/调优可能会导致同一输入的不同(同样有效)输出。我会修正这个要求,或者使用一个足够可配置的HTTP主机。我怀疑,如果不深入研究gzip算法并非常好地理解它,就无法确定地做到这一点。(对于其他更简单的压缩,我能够解决这个问题,但我从来没有用gzip尝试过。)我很确定可能有输入,其中任何一种算法都可能失败,但不能保证通过重复向输入添加随机字符来覆盖所有输出长度。