对于unity3d的web player中使用的sysytem.dll是阉割版,不是完整的微软的system.dll,所以在Unity3d中要使用压缩还是有点麻烦的,我这里使用的第三方的dll,经典的ICSharpCode.SharpZipLib。
我是在Web Player中使用,直接引入dll文件,然后在脚本中调用,最开始我用这个还是整得来很麻烦的!我建的一个控制台测试,始终只能压缩文本文件,不能压缩字符串。自己又能力有限,对于IO和Stram的操作不是很熟悉,转换多次始终不能使用这个压缩文件的方法压缩字符串,代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
/// <summary> /// 使用GZIP压缩文件的方法 /// </summary> /// <param name="sourcefilename">源文件路径</param> /// <param name="zipfilename">压缩文件路径</param> /// <returns>返回bool操作结果,成功true,失败 flase</returns> public static bool GZipFile(string sourcefilename, string zipfilename) { bool blResult;//表示压缩是否成功的返回结果 //为源文件创建读取文件的流实例 FileStream srcFile = File.OpenRead(sourcefilename); //为压缩文件创建写入文件的流实例, GZipOutputStream zipFile = new GZipOutputStream(File.Open(zipfilename, FileMode.Create)); try { byte[] FileData = new byte[srcFile.Length];//创建缓冲数据 srcFile.Read(FileData, 0, (int)srcFile.Length);//读取源文件 zipFile.Write(FileData, 0, FileData.Length);//写入压缩文件 blResult = true; } catch (Exception ee) { Console.WriteLine(ee.Message); blResult = false; } srcFile.Close();//关闭源文件 zipFile.Close();//关闭压缩文件 return blResult; } /// <summary> /// 使用GZIP解压文件的方法 /// </summary> /// <param name="zipfilename">源文件路径</param> /// <param name="unzipfilename">解压缩文件路径</param> /// <returns>返回bool操作结果,成功true,失败 flase</returns> public static bool UnGzipFile(string zipfilename, string unzipfilename) { bool blResult;//表示解压是否成功的返回结果 //创建压缩文件的输入流实例 GZipInputStream zipFile = new GZipInputStream(File.OpenRead(zipfilename)); //创建目标文件的流 FileStream destFile = File.Open(unzipfilename, FileMode.Create); try { int buffersize = 2048;//缓冲区的尺寸,一般是2048的倍数 byte[] FileData = new byte[buffersize];//创建缓冲数据 while (buffersize > 0)//一直读取到文件末尾 { buffersize = zipFile.Read(FileData, 0, buffersize);//读取压缩文件数据 destFile.Write(FileData, 0, buffersize);//写入目标文件 } blResult = true; } catch (Exception ee) { Console.WriteLine(ee.Message); blResult = false; } destFile.Close();//关闭目标文件 zipFile.Close();//关闭压缩文件 return blResult; }
后面也在网上找了几个方法还是不行,都几近放弃了,准备改教了,换实现方法了,偶然发现一个方法,可以很好的实现,并且压缩的效率也不低,因为我要压缩的是26万个float的二维数据,格式简单;我看压缩率也不错,就用这个了,果断的方便的实现我们的需求。
因为Unity3d的阉割,我找了多久哦!特分享出来,如果有遇到和我相同需求的,可以参考参考!后面放出我做的控制台的测试程序。
有需要查看代码的朋友:code
http://write.blog.csdn.net/postedit