Tag: gzipstream

GZipStream没有读取整个文件

我有一些代码可以下载gzip压缩文件并对其进行解压缩。 问题是,我无法解压缩整个文件,它只读取前4096个字节,然后再读取大约500个字节。 Byte[] buffer = new Byte[4096]; int count = 0; FileStream fileInput = new FileStream(“input.gzip”, FileMode.Open, FileAccess.Read, FileShare.Read); FileStream fileOutput = new FileStream(“output.dat”, FileMode.Create, FileAccess.Write, FileShare.None); GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress, true); // Read from gzip steam while ((count = gzipStream.Read(buffer, 0, buffer.Length)) > 0) { // Write to output file fileOutput.Write(buffer, 0, […]

有没有办法知道byte 是否已被gzipstream压缩?

有没有办法知道字节[]是否已被GzipStream .net类压缩(或不压缩)? 编辑:只想知道byte []数组是否已被压缩(因为我将始终使用GzipStream进行压缩和解压缩)

C#到Java:Base64String,MemoryStream,GZipStream

我有一个在.NET中被gzip压缩的Base64字符串,我想将它转换回Java中的字符串。 我正在寻找C#语法的一些Java等价物,特别是: Convert.FromBase64String 的MemoryStream GZipStream 这是我想要转换的方法: public static string Decompress(string zipText) { byte[] gzipBuff = Convert.FromBase64String(zipText); using (MemoryStream memstream = new MemoryStream()) { int msgLength = BitConverter.ToInt32(gzipBuff, 0); memstream.Write(gzipBuff, 4, gzipBuff.Length – 4); byte[] buffer = new byte[msgLength]; memstream.Position = 0; using (GZipStream gzip = new GZipStream(memstream, CompressionMode.Decompress)) { gzip.Read(buffer, 0, buffer.Length); } return Encoding.UTF8.GetString(buffer); […]

GZipStream机器依赖

我在.NET 4.0中遇到了一些奇怪的机器/操作系统相关的GZipStream行为。 这是相关代码: public static string Compress(string input) { using(var ms = new MemoryStream(Encoding.UTF8.GetBytes(input))) using(var os = new MemoryStream()) { using(var gz = new GZipStream(os,CompressionMode.Compress,true)) { ms.CopyTo(gz); } return string.Join(“”,os.ToArray().Select(b=>b.ToString(“X2”))); } } 运行压缩(“freek”)给了我 1F8B08000000000004004B2B4A4DCD06001E33909D05000000 在Windows 7和 1F8B0800000000000400ECBD07601C499625262F6DCA7B7F4AF54AD7E074A10880601324D8904010ECC188CDE692EC1D69472329AB2A81CA6556655D661640CCED9DBCF7DE7BEFBDF7DE7BEFBDF7BA3B9D4E27F7DFFF3F5C6664016CF6CE4ADAC99E2180AAC81F3F7E7C1F3F22CEEB3C7FFBFF040000FFFF1E33909D05000000 在Windows Server 2008R2上。 两者都是64位。 我希望结果是一样的。 当我解压缩任一结果时,两台机器都给出正确的结果。 我已经发现在W7 ms.Length == 25而在W2K8R2 ms.Length == 128,但没有线索为什么。 这是怎么回事?

我是否可以在不写入中间临时存储的情况下获取文件的GZipStream?

我是否可以为磁盘上的文件获取GZipStream而无需将整个压缩内容写入临时存储? 我目前正在磁盘上使用临时文件,以避免在非常大的文件上使用MemoryStream可能导致内存耗尽(这很好)。 public void UploadFile(string filename) { using (var temporaryFileStream = File.Open(“tempfile.tmp”, FileMode.CreateNew, FileAccess.ReadWrite)) { using (var fileStream = File.OpenRead(filename)) using (var compressedStream = new GZipStream(temporaryFileStream, CompressionMode.Compress, true)) { fileStream.CopyTo(compressedStream); } temporaryFileStream.Position = 0; Uploader.Upload(temporaryFileStream); } } 我想做的是通过创建GZipStream来消除临时存储,并且只有当Uploader类从它请求字节时才从原始文件中读取它。 这样的事情可能吗? 如何构建这样的实现? 请注意, Upload是一个静态方法,带有签名static void Upload(Stream stream) 。 编辑:完整的代码在这里,如果它是有用的。 我希望我已经在上面的示例中包含了所有相关的上下文。

GZipStream的减压性能很差

我有一个连接到后端WAS服务器的.NET 2.0 WinForms应用程序。 我正在使用GZipStream来解码从对服务器发出的HttpWebRequest调用返回的数据。 返回的数据是压缩的CSV,Apache正在压缩。 整个服务器堆栈是Hibernate – > EJB – > Spring – > Apache。 对于小响应,性能很好( 150KB的响应时,解压缩需要60多秒。 大部分时间似乎花在GZipStream构造函数中。 这是显示我从HttpWebResponse调用获取响应流的位置的代码: using (Stream stream = this.Response.GetResponseStream()) { if (this.CompressData && this.Response.ContentEncoding == “gzip”) { // Decompress the response byte[] b = Decompress(stream); this.ResponseBody = encoding.GetString(b); } else { // Just read the stream as a string using […]

使用GZipStream解压缩仅返回第一行

我一直在研究解析第三方fms日志的function。 日志在Gzip中,因此我使用解压缩function,适用于我们使用的任何其他Gzip文件。 解压缩这些文件时,我只得到压缩文件的第一行,没有例外,它只是找不到其余的字节,好像第一行有一个EOF。 我尝试使用Ionic.Zlib而不是System.IO.Compression,但结果是一样的。 这些文件似乎没有任何损坏,使用Winrar解压缩它们。 如果有人知道如何解决这个问题,我将非常感谢你的帮助。 谢谢 您可以在此处下载示例文件: http : //www.adjustyourset.tv/fms_6F9E_20120621_0001.log.gz 这是我的减压function: public static bool DecompressGZip(String fileRoot, String destRoot) { try { using (FileStream fileStram = new FileStream(fileRoot, FileMode.Open, FileAccess.Read)) { using (FileStream fOutStream = new FileStream(destRoot, FileMode.Create, FileAccess.Write)) { using (GZipStream zipStream = new GZipStream(fileStram, CompressionMode.Decompress, true)) { byte[] buffer = new byte[4096]; int […]

GZipStream和DeflateStream生成更大的文件

我正在尝试在C#中使用deflate / gzip流,但看起来压缩后的文件比以前更大。 例如,我压缩一个900ko的docx文件,但它产生一个1.4Mo! 它适用于我尝试的每个文件。 我做错的方式可能是我错了吗? 这是我的代码: FileStream input = File.OpenRead(Environment.CurrentDirectory + “/file.docx”); FileStream output = File.OpenWrite(Environment.CurrentDirectory + “/compressedfile.dat”); GZipStream comp = new GZipStream(output, CompressionMode.Compress); while (input.Position != input.Length) comp.WriteByte((byte)input.ReadByte()); input.Close(); comp.Close(); // automatically call flush at closing output.Close();

GZipStream正在切断XML的最后一部分

我创建了一个名为AddGZip的扩展方法,如下所示: public static void AddGZip(this HttpResponse response) { response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); response.AppendHeader(“Content-Encoding”, “gzip”); } 这是代码的一个非常简化的版本: var response = HttpContext.Current.Response; var request = HttpContext.Current.Request; var result = File.ReadAllText(path); if (request.SupportsGZip) { response.AddGZip(); } response.Write(result); response.Flush(); 当您在具有GZip支持的Web浏览器中查看响应时,会出现如下错误: “XML解析错误:未关闭的令牌位置: http://webserver1/1234.xml第78行,第1列:” 当我查看源代码时,它基本上错过了XML文件末尾的最后一个> 。 所以1或2个字节。 如果我注释掉AddGZip线,它可以正常工作。 但是我真的想支持GZip,因为XML可能非常大。 有人对我有建议吗? 我已经尝试检查了很多博客,但似乎没有针对此类错误的解决方案。 戴夫

在WebRequest中发送gzip压缩数据?

我有大量的数据(~100k),我的C#app正在安装mod_gzip发送到我的Apache服务器。 我正在尝试使用System.IO.Compression.GZipStream首先gzip数据。 PHP接收原始的gzip压缩数据,因此Apache并没有像我期望的那样解压缩它。 我错过了什么吗? System.Net.WebRequest req = WebRequest.Create(this.Url); req.Method = this.Method; // “post” req.Timeout = this.Timeout; req.ContentType = “application/x-www-form-urlencoded”; req.Headers.Add(“Content-Encoding: gzip”); System.IO.Stream reqStream = req.GetRequestStream(); GZipStream gz = new GZipStream(reqStream, CompressionMode.Compress); System.IO.StreamWriter sw = new System.IO.StreamWriter(gz, Encoding.ASCII); sw.Write( large_amount_of_data ); sw.Close(); gz.Close(); reqStream.Close() System.Net.WebResponse resp = req.GetResponse(); // (handle response…) 我不完全确定“Content-Encoding:gzip”适用于客户端提供的头文件。