LZWC#中的压缩字符串我在谷歌上搜索了几个小时,我发现所有的东西都使用MemoryStream、BinaryWriters等。我只想能够做这样的事情:string_data="12345";字符串_result=CompressToLZW(_data);字符串_data=“12345”;字符串_result=CompressToLZW(_data);然后通过Ajax设备将该字符串传递给浏览器。我已经有了用于javascript的LZW解压缩算法(http://rosettacode.org/wiki/LZW_compression#JavaScript)谢谢。-更新:这是我现在使用的代码http://paste.lisp.org/display/12198string_data="12345_12345_12345_12345";byte[]byteArray=Encoding.ASCII.GetBytes(_data);MemoryStream_st=newMemoryStream(byteArray);StreamReader_sr=newStreamReader(_st);MemoryStreamstreamoutput=newMemoryStream();BinaryWriter_output=newBinaryWriter(streamoutput);LZW.Compress(_sr,_output);string_res=(newStreamReader(_output.BaseStream).ReadToEnd();return_res;UPDATE2我在C#中找到了一个源代码,它在http://code.google.com/p/sharp-lzw/source/浏览/。谢谢。-使用类似这样的东西:privatestringCompressToLZW(stringinput){using(MemoryStreamstream=newMemoryStream()){ComputeLZW(input,stream);stream.Seek(0,SeekOrigin.Begin);使用(StreamReaderreader=newStreamReader(stream)){returnreader.ReadToEnd();}}}其中ComputeLZW()是您使用流的LZW方法。鉴于LZW代码不一定需要落在字节边界上,简单地将LZW压缩的二进制输出转换为UTF8字符串(就像StreamReader方法一样)很可能会失败,从而产生非法输出。看来您引用的Javascriptunzip函数实际上将数组作为输入。将二进制输出传递给javascript解压缩方法的最有效方法可能是对二进制输出进行base64编码,然后base64将JS端的base64解码为数字数组,并将其提供给您的方法。这可能是有问题的效率。值得在部署前进行测试。您可以像这样将字符串“转换”为MemoryStream:byte[]byteArray=Encoding.ASCII.GetBytes(youInputString);MemoryStreamstream=newMemoryStream(byteArray);(确保您了解所需的编码)。另一种方式是这样的:StreamReaderreader=newStreamReader(methodOutputStream);字符串文本=reader.ReadToEnd();要使用http://paste.lisp.org/display/12198上的方法,您可以先将字符String粘贴到Stream,将其提供给LZW压缩方法,接收输出Stream,并将该流转换为String。唯一的区别是网站上的代码使用FileStreams。以上就是C#学习教程:LZW压缩C#中字符串共享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
