起因: 在Unity里面传输一些数据.因为是json字符串,故欲压缩以提升传输效率..
实际操作的时候,用System.IO.Compression中的DeflateStream进行操作.
自己写的发送模拟程序中跑的很嗨.但是在Unity之中使用的时候报错.
System.DllNotFoundException: MonoPosixHelper
at (wrapper managed-to-native) System.IO.Compression.DeflateStream:CreateZStream (System.IO.Compression.CompressionMode,bool,System.IO.Compression.DeflateStream/UnmanagedReadOrWrite,intptr)
at System.IO.Compression.DeflateStream..ctor (System.IO.Stream compressedStream, CompressionMode mode, Boolean leaveOpen, Boolean gzip) [0x00000] in <filename unknown>:0
at System.IO.Compression.DeflateStream..ctor (System.IO.Stream compressedStream, CompressionMode mode, Boolean leaveOpen) [0x00000] in <filename unknown>:0
at (wrapper remoting-invoke-with-check) System.IO.Compression.DeflateStream:.ctor (System.IO.Stream,System.IO.Compression.CompressionMode,bool)
at WebSocketSharp.Ext.compress (System.IO.Stream stream) [0x00000] in <filename unknown>:0
at WebSocketSharp.Ext.Compress (System.IO.Stream stream, CompressionMethod method) [0x00000] in <filename unknown>:0
at WebSocketSharp.WebSocket.send (Opcode opcode, System.IO.Stream stream) [0x00000] in <filename unknown>:0 UnityEngine.Debug:Log(Object)
具体的意思就是找不到DLL或者DLL中找不到指定的类.
经过谷歌之后发现原来, 2009年的时候就已经有人在Unity社区提过这个问题了.可是基本没啥人重视(#‵′)凸
原因呢,是因为,Unity那帮子人使用的Mono版本一直是2.6的,后来就没从Mono项目那边同步过(非本人言论,别打我).
然后就是stackoverflow了,那上面人们讨论这个问题挺多的,都是自己写或者现成的第三方方案.
当然了,最后我也是用的现成的.
微软在2014年的时候把.net类库开源了, 然后有人把compression这部分代码整理了一份Unity版的.
即System.IO.Compression => Unity.IO.Compression.