I'm looking for a LZW pression algorithm in C# that takes a "string" and returns a string. I've googling for hours and all I've found use MemoryStream, BinaryWriters, etc.
I just want to be able to do something like:
string _data = "12345";
string _result = CompressToLZW(_data);
and then pass that string via Ajax to the browser. I already have the LZW depression algorithm for javascript ()
Thanks.-
UPDATE:
This is the code I'm using right now with
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;
UPDATE 2 I found a source code in C# that does the work at / Thanks.-
I'm looking for a LZW pression algorithm in C# that takes a "string" and returns a string. I've googling for hours and all I've found use MemoryStream, BinaryWriters, etc.
I just want to be able to do something like:
string _data = "12345";
string _result = CompressToLZW(_data);
and then pass that string via Ajax to the browser. I already have the LZW depression algorithm for javascript (http://rosettacode/wiki/LZW_pression#JavaScript)
Thanks.-
UPDATE:
This is the code I'm using right now with http://paste.lisp/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;
UPDATE 2 I found a source code in C# that does the work at http://code.google./p/sharp-lzw/source/browse/ Thanks.-
Share Improve this question edited Jul 15, 2011 at 17:46 Nick asked Jul 15, 2011 at 16:11 NickNick 72710 silver badges20 bronze badges 1- Link doesn't work anymore. – Daniel Commented Nov 5, 2020 at 11:13
3 Answers
Reset to default 4Use something like this:
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();
}
}
}
where ComputeLZW() is the LZW method you have that uses a stream.
Given that LZW codes needn't necessarily fall on byte boundaries, simply converting the binary output of LZW pression to a UTF8 string (as with the StreamReader
approach) will most likely fail, producing illegal output.
It seems that the Javascript depress function you refer to actually takes an array of numbers as its input. Probably the most efficient way to convey the binary output to the javascript depress method would be to base64 encode the binary output, then to base64 decode at the JS end into a number array and to supply this to your method.
This might be of questionable efficiency. Worth testing before deploying.
You can "convert" a string into a MemoryStrem like this:
byte[] byteArray = Encoding.ASCII.GetBytes(youInputString);
MemoryStream stream = new MemoryStream(byteArray);
(make sure you understand which encoding you need).
The other way goes like this:
StreamReader reader = new StreamReader(methodOutputStream);
string text = reader.ReadToEnd();
To use the methods found on http://paste.lisp/display/12198, you can first convert your string to a Stream, feed it to the LZW pression methods, receive an output Stream, and convert that stream to a string. The only difference is that the code on the site uses FileStreams.
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745108668a4611711.html
评论列表(0条)