ICSharpCode.SharpZipLib.Zip 压缩Bytes[] 和 压缩后通过Socket发送给客户端 如何解决?

问题描述

我是菜鸟,刚刚接触C#我想实现如下两项功能首先将内存中Bytes[]传过来的数据通过ICSharpCode.SharpZipLib.Zip进行压缩,存放在一个文件中。因为,过一段时间,Bytes[]传一次,每次大约1MB的数据量。其次,将压缩后的文件通过Socket实时发送给客户端。请问大侠们如何解决,在解决的过程中尽可能降低内存的使用量,和CPU的利用率。

解决方案

解决方案二:
byte[]压缩之后也还是byte[],这方面没什么不一样。既然你能够“传过来”,那么实现“返回给客户端”也不算什么事儿。至于应不应该在服务器端做这个(还是应该在客户端做?或者根本无需给客户端返回?)那是业务逻辑,从你的描述上看不出来。
解决方案三:
如果你只是别人告诉你说“ICSharpCode.SharpZipLib.Zip”这个名词儿你需要找代码,那么可以自己搜索,还是有很多例子的。这里没有什么设计技术,就是工人重复劳动。
解决方案四:
引用2楼sp1234的回复:

如果你只是别人告诉你说“ICSharpCode.SharpZipLib.Zip”这个名词儿你需要找代码,那么可以自己搜索,还是有很多例子的。这里没有什么设计技术,就是工人重复劳动。

首先,多谢您的回复,现在传来的数据每隔1s传来一次数据(Byte[]),每次1MB,虽然是Byte[]但是,他的数据太大,我需要进行压缩保存(存成一个文件“.dat”),同时在服务器端(压缩后)传送给客户端。我现在关于压缩和传送这块没有弄明白,应该如何处理,希望能提供一些代码实例。谢谢
解决方案五:
实在无法理解你为什么非要压缩后再存成文件再传……多此一举。压缩和socket传输都有现成例子,合在一起就好了
解决方案六:
引用4楼wjq的回复:

实在无法理解你为什么非要压缩后再存成文件再传……多此一举。压缩和socket传输都有现成例子,合在一起就好了

这样是为了节省磁盘空间和传送过程中减少占用网络资源的时间
解决方案七:
楼主选择了压缩功能,其实就是节省传输量,但浪费了CPU资源,这个取舍只能根据情况决定.1s传1M真是挺吓人的,不会搞错吧
解决方案八:
引用5楼HXWYL的回复:

Quote: 引用4楼wjq的回复:
实在无法理解你为什么非要压缩后再存成文件再传……多此一举。压缩和socket传输都有现成例子,合在一起就好了

这样是为了节省磁盘空间和传送过程中减少占用网络资源的时间

那你浪费磁盘空间干什么?直接把压缩后的byte[]传过去就好了
解决方案九:
引用7楼wjq的回复:

Quote: 引用5楼HXWYL的回复:
Quote: 引用4楼wjq的回复:
实在无法理解你为什么非要压缩后再存成文件再传……多此一举。压缩和socket传输都有现成例子,合在一起就好了

这样是为了节省磁盘空间和传送过程中减少占用网络资源的时间

那你浪费磁盘空间干什么?直接把压缩后的byte[]传过去就好了

存储在服务器是为了将来离线时,随时可拷贝此数据到任何一台操作员站上,而传送给操作员站的压缩数据在操作员站接收后并不保存,仅是显示后便可丢失。压缩问题已经解决了。
解决方案十:
引用6楼tcmakebest的回复:

楼主选择了压缩功能,其实就是节省传输量,但浪费了CPU资源,这个取舍只能根据情况决定.1s传1M真是挺吓人的,不会搞错吧

就是这个数据量
解决方案十一:
引用9楼HXWYL的回复:

Quote: 引用6楼tcmakebest的回复:
楼主选择了压缩功能,其实就是节省传输量,但浪费了CPU资源,这个取舍只能根据情况决定.1s传1M真是挺吓人的,不会搞错吧

这个数据量是压缩前的,如果压缩后,应该在1Kb左右
解决方案十二:
不用存文件,中间用MemoryStream就行byte[]->MemoryStream->Zip(Stream)->Socket发送
解决方案十三:
引用11楼dongxinxi的回复:

不用存文件,中间用MemoryStream就行byte[]->MemoryStream->Zip(Stream)->Socket发送

这是个好思路,可否给出一些代码?
解决方案十四:
如果你只是压缩一下,用Net自带的GZipStream就行了.Net4.0里也有封装好的ZIP压缩伪代码//using(varms=newMemoryStream(数据.Length))//如果套接字是流模式,直接写入数据发送,否则先压缩到ms,再发送using(varmyNetworkStream=newNetworkStream(socket)){using(varzipStream=newZipOutputStream(ms)){zipStream.SetLevel(压缩级别);zipStream.Write(数据,0,数据.Length);//socket.Send(zipStream...)}}

解决方案十五:
using(varzipStream=newZipOutputStream(myNetworkStream))
解决方案:
引用13楼dongxinxi的回复:

如果你只是压缩一下,用Net自带的GZipStream就行了.Net4.0里也有封装好的ZIP压缩伪代码//using(varms=newMemoryStream(数据.Length))//如果套接字是流模式,直接写入数据发送,否则先压缩到ms,再发送using(varmyNetworkStream=newNetworkStream(socket)){using(varzipStream=newZipOutputStream(ms)){zipStream.SetLevel(压缩级别);zipStream.Write(数据,0,数据.Length);//socket.Send(zipStream...)}}

我也将这两天在别人程序基础上修改的程序Copy过来,大家给看看。我刚刚开始学习c#,望各位大侠包含。我接收到的数据就是一个Byte数组,我需要实现的功能是,不断的压缩保存,同时不断将压缩后数据发送出去(通过Socket),现在压缩应该是实现了。Stopwatchsw=newStopwatch();sw.Start();while(nRead<nTotal){intnCount=PCI_Interface_GetFifoCntForRead(mHandle);if(nCount>READ_COUNT){PCI_Interface_ReadFifo(mHandle,Buffer,READ_COUNT);ZipHelp.Zip(Buffer,DateTime.Now.ToString("yyyy_MM_dd_hh-mm-ss.")+String.Format("{0:D3}",newRandom().Next(0,1000)),DateTime.Now.ToString("yyyy_MM_dd_hh-mm-ss.")+String.Format("{0:D3}",newRandom().Next(0,1000))+".wmj");nRead++;txtRecv.Text=nRead.ToString();Application.DoEvents();}else{//尚未达到读取数量,等待一段时间查询一次Thread.Sleep(1);}}sw.Stop();publicstaticvoidZip(byte[]ByteToZip,stringfilename,stringZipedFile){FileStreamZipFile=newFileStream(ZipedFile,FileMode.OpenOrCreate,FileAccess.Write);ZipOutputStreamZipStream=newZipOutputStream(ZipFile);ZipEntryZipEntry=newZipEntry(Path.GetFileName(filename));ZipStream.PutNextEntry(ZipEntry);ZipStream.SetLevel(9);try{ZipStream.Write(ByteToZip,0,ByteToZip.Length);}catch(System.Exceptionex){throwex;}ZipStream.Close();ZipFile.Close();}

时间: 2024-10-03 00:56:36

ICSharpCode.SharpZipLib.Zip 压缩Bytes[] 和 压缩后通过Socket发送给客户端 如何解决?的相关文章

基于ICSharpCode.SharpZipLib.Zip的压缩解压缩

原文:基于ICSharpCode.SharpZipLib.Zip的压缩解压缩 今天记压缩解压缩的使用,是基于开源项目ICSharpCode.SharpZipLib.Zip的使用. 一.压缩: /// <summary> /// 压缩 /// </summary> /// <param name="sourceDirectory"></param> /// <param name="targetZipName"&g

C#使用ICSharpCode.SharpZipLib压缩文件[转]

本文来自CSDN博客,出处:http://blog.csdn.net/venus0314/archive/2006/09/25/1280610.aspx   一直以来都是采用WinZIP进行压缩的,调用起来方便,而且公司也有版权,所以就没有考虑过其他的东东.不过唯一不足的地方就是需要安装(包括Win Zip和其Command Line Addon),而且需要让程序知道调用的WinZIP路径,配置起来不是很方便. 本次项目,考虑到程序的易配置性,决定采用另外别的方式进行压缩,找了找就找到了ICSh

Csharp 利用ICSharpCode.SharpZipLib解壓文件

/* *http://www.koders.com/csharp/fid7241B3C8598C20BA18652B5BB5C19D220988E2D4.aspx?s=file * http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx * http://www.eggheadcafe.com/tutorials/aspnet/9ce6c242-c14c-4969-9251-af95e4cf320f/zip--unzip-f

缓存-未能加载文件或程序集“ICSharpCode.SharpZipLib&amp;amp;quot;

问题描述 未能加载文件或程序集"ICSharpCode.SharpZipLib" 解决方案 没有找到dll文件,或者版本不对 解决方案二: 解决方法:重新引用工程下的DLL.把DLL放到当前工程BIN下面.再在VS中引用.直接引用工程外就报错.在WEB环境下测试的.

C# 下利用ICSharpCode.SharpZipLib.dll实现文件/文件夹压缩、解压缩

ICSharpCode.SharpZipLib.dll下载地址 1.压缩某个指定目录下日志,将日志压缩到CompressionDirectory文件夹中,并清除原来未压缩日志. #region 压缩logs目录下日志 public static void CompresslogDic() { try { string logFilePath = AppDomain.CurrentDomain.BaseDirectory + "logs"; DirectoryInfo logsDic =

不同的机器压缩后的ZIP压缩文件上传后,有的存在中文乱码,求帮忙分析分析。

问题描述 不同的机器压缩后的ZIP压缩文件上传后,有的存在中文乱码,求帮忙分析分析. 用了commons-compress-1.8.jar下的ZipArchiveInputStream 进行的压缩包解压处理,在不同机器上对同样文件进行压缩生成zip压缩包,有的机器生成的压缩包上传后中文就乱码,有的就不是乱码,求帮忙分析分析. 解决方案 7zip 压缩文件 分析

Android图片压缩(质量压缩和尺寸压缩)

在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩):质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手机拍照都能达到3M左右了,尺寸压缩一般可用于生成缩略图.两种方法都实装在了我的项目中,结果却发现在质量压缩的模块中,本来1.9M的图片压缩后反而变成3M多了,很是奇怪,再做了进一步调查终于知道原因了.下面这个博客说的比较清晰: android图片压缩总结 总结来看,图片有三种存在形式:硬盘上时是fi

基于Zlib算法的流压缩、字符串压缩源码

原文:基于Zlib算法的流压缩.字符串压缩源码 Zlib.net官方源码demo中提供了压缩文件的源码算法.处于项目研发的需要,我需要对内存流进行压缩,由于zlib.net并无相关文字帮助只能自己看源码解决.通过对SharpZipLib的demo研究,写出了Zlib.net的流压缩算法. 中间花费了不少的时间,应为通过Stream压缩出来的数据全是空的,呵呵,主要原因就是忽略了ZOutputStream.flush()和ZOutPutStream.close()方法.大家自己看吧.关于字符串压缩

php bcd码压缩-把十进制数字压缩到十六进制数据中

例,php bcd码压缩-把十进制数字压缩到十六进制数据中  代码如下 复制代码 <?php /* php bcd码压缩-把十进制数字压缩到十六进制数据中 例如 0091 压缩后 0x00 0x91 */ $string = '0091'; $bytes = Bytes::getBytes($string); print_r($bytes); /* Array (     [0] => 48     [1] => 48     [2] => 57     [3] => 49