Tag: deflate

无法解压缩ZLIB / DEFLATE数据

我正在尝试从网络捕获文件(PCAP)中提取压缩字节数据。 来自其中一些数据包的数据没有ZLIB标头(前2个字节,其中第一个字节的低4位始终为8),因此当我尝试使用ZlibStream进行解压缩时会出现ZlibStream 。 标题数据似乎工作正常。 据我所知,ZLIB只是DEFLATE的页眉和页脚,我将没有标题的数据传递给DeflateStream 。 这次DeflateStream不会抛出任何错误,它只是提供了错误的数据(但它给出了正确的长度)…… 这是一个示例数据。 C#代码示例使用DotNetZip: byte[] test3 = new byte[] { 0x1a, 0x6d, 0xf, 0x8d, 0xb6, 0x87, 0x46, 0xdb, 0x43, 0xa3, 0xed, 0xa1, 0xd1, 0xf6, 0xd0, 0x68, 0x7b, 0x68, 0xb4, 0x3d, 0x34, 0xda, 0x1e, 0xb2, 0x44, 0x3a, 0x39, 0x6f, 0x24, 0xae, 0x1f, 0x2, 0x0, 0x0, 0x0, 0xff, 0xff }; static void […]

用于HTTP压缩的GZip或Deflate

哪种压缩方法更好? 我听说很多关于GZip被广泛使用的来回,但Deflate更快(在某些情况下)。 是否有一个可以使用的标准,为什么?

添加Interval时,HttpWebRequest会变慢

测试下载网页源的不同可能性我得到了以下结果(google.com,9gag.com的平均时间毫秒): 普通的HttpWebRequest:169,360 Gzip HttpWebRequest:143,260 WebClient GetStream:132,295 WebClient DownloadString:143,389 所以对于我的9gag客户端,我决定采用gzip HttpWebRequest。 问题是,在我的实际程序中实现后,请求所需的时间超过两倍。 只在两个请求之间添加Thread.Sleep时也会出现问题。 编辑: 刚刚改进了一些代码,仍然是同样的问题:当我在循环中运行时,当我在请求之间添加延迟时,请求需要更长的时间 for(int i = 0; i < 100; i++) { getWebsite("http://9gag.com/"); } 每个请求大约需要250毫秒。 for(int i = 0; i < 100; i++) { getWebsite("http://9gag.com/"); Thread.Sleep(1000); } 每个请求大约需要610毫秒。 private string getWebsite(string Url) { Stopwatch stopwatch = Stopwatch.StartNew(); HttpWebRequest http = (HttpWebRequest)WebRequest.Create(Url); http.AutomaticDecompression = DecompressionMethods.GZip […]

C#decode(解压缩)缩小PDF文件的数据

我想在C#中解压缩一些DeflateCoded数据(PDF提取)。 不幸的是,我每次都遇到exception“解码时发现无效数据”。 但数据是有效的。 private void Decompress() { FileStream fs = new FileStream(@”S:\Temp\myFile.bin”, FileMode.Open); //First two bytes are irrelevant fs.ReadByte(); fs.ReadByte(); DeflateStream d_Stream = new DeflateStream(fs, CompressionMode.Decompress); StreamToFile(d_Stream, @”S:\Temp\myFile1.txt”, FileMode.OpenOrCreate); d_Stream.Close(); fs.Close(); } private static void StreamToFile(Stream inputStream, string outputFile, FileMode fileMode) { if (inputStream == null) throw new ArgumentNullException(“inputStream”); if (String.IsNullOrEmpty(outputFile)) throw new ArgumentException(“Argument null […]

ServiceStack – 使用gzip / deflate压缩和JSONP请求

我有一个ServiceStack服务,使用RequestContext.ToOptimizedResult()压缩响应,例如: [Route(“/numbers/search”)] public class FindNumbers { } public object Get(FindNumbers query) { var data = new List { “One”, “Two”, “Three” }; return RequestContext.ToOptimizedResult(data); } 这在发出如下请求时非常有效: GET http://myhost:13487/numbers/search.json 并使用Accept-Encoding请求标头按预期压缩: Accept-Encoding: gzip,deflate,sdch 我也可以发出JSONP请求: GET http://myhost:13487/numbers/search?callback=func 正确返回application/javascript回调(未压缩)。 问题 当我将Accept-Encoding请求标头添加到JSONP请求时,响应是根据原始JSON请求的压缩JSON数据,而不是压缩的application/javascript回调。 是否有任何明显的原因导致我对此行为缺失,或者它只是ServiceStack中的一个错误? 我的期望是在响应中接收压缩的JSONP回调,但我对JSONP相当绿色,并且可能有一个很好的理由进行回退。 请注意,我正在通过ServiceStack源进行工作,但我想我会在那里得到它,因为更多的大脑比一个更好… 提前致谢 编辑 所以,我已经从以下来源追踪了这个问题 https://github.com/ServiceStack/ServiceStack/blob/5d09d439cd1a13712411552e2b3ede5a71af2ee5/src/ServiceStack/Host/Handlers/GenericHandler.cs#L79 和 https://github.com/ServiceStack/ServiceStack/blob/5d09d439cd1a13712411552e2b3ede5a71af2ee5/src/ServiceStack/Host/RestHandler.cs#L107 if (doJsonp && !(response is CompressedResult)) return httpRes.WriteToResponse(httpReq, response, […]

如何在文件的一部分上使用DeflateStream?

我正在研究另一个问题的解决方案,即读取PNG的’zTXt’块中的数据。 我就是在文件中找到块,并阅读zTXt的关键字。 我在阅读zTXt的压缩部分时遇到问题。 我之前从未使用过DeflateStream对象,并且遇到了一些麻烦。 在读取时,似乎期望长度参数为“未压缩”字节。 但就我而言,我只知道“压缩”字节中数据的长度。 为了解决这个问题,我将需要解压缩的所有数据放入MemoryStream中,然后使用DeflateStream“读取结束”。 现在这只是peachy,除了它抛出一个InvalidDataException,并显示消息“块长度与其补码不匹配”。 现在我不知道这意味着什么。 怎么可能出错? 块的格式是4个字节用于ID(“zTXt”),一个大端32位int用于数据长度,数据,最后是CRC32校验和,我现在忽略它。 zTXt块的格式首先是以null结尾(字符串作为关键字),然后是压缩方法的一个字节(总是0,DEFLATE方法),其余数据是压缩文本。 我的方法接受一个新的FileStream,并返回一个包含zTXt关键字和数据的字典。 这是现在的怪物: public static List<KeyValuePair> GetZtxt(FileStream stream) { var ret = new List<KeyValuePair>(); try { stream.Position = 0; var br = new BinaryReader(stream, Encoding.ASCII); var head = br.ReadBytes(8); // The header is the same for all PNGs. if (!head.SequenceEqual(new byte[] { 0x89, 0x50, […]