我在C#中寻找一个LZW压缩算法,它采用“字符串”并返回一个字符串。 我已经谷歌搜索了几个小时,所有我发现使用MemoryStream,BinaryWriters等。
我只是希望能够做到这样的事情:
string _data = "12345";
string _result = CompressToLZW(_data);
然后通过Ajax将该字符串传递给浏览器。我已经有了javascript的LZW解压缩算法(http://rosettacode.org/wiki/LZW_compression#JavaScript)
感谢.-
更新:
这是我正在使用http://paste.lisp.org/display/12198的代码
string _data = "12345_12345_12345_12345";
byte[] byteArray = Encoding.ASCII.GetBytes(_data);
MemoryStream _st = new MemoryStream(byteArray);
StreamReader _sr = new StreamReader(_st);
MemoryStream streamoutput = new MemoryStream();
BinaryWriter _output= new BinaryWriter(streamoutput);
LZW.Compress(_sr, _output);
string _res = (new StreamReader(_output.BaseStream)).ReadToEnd();
return _res;
string _data = "12345_12345_12345_12345";
byte[] byteArray = Encoding.ASCII.GetBytes(_data);
MemoryStream _st = new MemoryStream(byteArray);
StreamReader _sr = new StreamReader(_st);
MemoryStream streamoutput = new MemoryStream();
BinaryWriter _output= new BinaryWriter(streamoutput);
LZW.Compress(_sr, _output);
string _res = (new StreamReader(_output.BaseStream)).ReadToEnd();
return _res;
更新2 我在C#中找到了一个源代码来完成http://code.google.com/p/sharp-lzw/source/browse/的工作 感谢.-
答案 0 :(得分:3)
使用类似的东西:
private string CompressToLZW(string input)
{
using (MemoryStream stream = new MemoryStream())
{
ComputeLZW(input, stream);
stream.Seek(0, SeekOrigin.Begin);
using (StreamReader reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
}
其中ComputeLZW()是您使用流的LZW方法。
答案 1 :(得分:1)
鉴于LZW代码不一定需要落在字节边界上,只需将LZW压缩的二进制输出转换为UTF8字符串(与StreamReader
方法一样)很可能会失败,从而产生非法输出。
您所引用的Javascript解压缩功能似乎实际上以数组为输入。将二进制输出传递给javascript解压缩方法的最有效方法可能是对二进制输出进行base64编码,然后将JS端的base64解码为数组,并将其提供给您的方法。
这可能是有问题的效率。在部署之前值得测试。
答案 2 :(得分:0)
您可以将字符串“转换”为MemoryStrem,如下所示:
byte[] byteArray = Encoding.ASCII.GetBytes(youInputString);
MemoryStream stream = new MemoryStream(byteArray);
(确保您了解所需的编码)。
另一种方式是这样的:
StreamReader reader = new StreamReader(methodOutputStream);
string text = reader.ReadToEnd();
要使用http://paste.lisp.org/display/12198上的方法,您可以先将字符串转换为Stream,将其提供给LZW压缩方法,接收输出Stream,然后将该流转换为字符串。唯一的区别是网站上的代码使用FileStreams。