【发布时间】:2010-06-23 14:14:01
【问题描述】:
我必须在 Flash 中加载一个大的 xml,并且我正在尝试将其压缩发送。为此,我尝试 zlib 压缩字符串并将其发送 base64 编码。在闪存中,我将字符串转换为字节数组并使用它的 uncompress() 方法。到目前为止,我尝试过:
ZLIB.NET
byte[] bytData = System.Text.Encoding.UTF8.GetBytes(str);
MemoryStream ms = new MemoryStream();
Stream s = new zlib.ZOutputStream(ms, 3);
s.Write(bytData, 0, bytData.Length);
s.Close();
byte[] compressedData = (byte[])ms.ToArray();
return System.Convert.ToBase64String(compressedData);
Ionic.Zlib (DotNetZip)
return System.Convert.ToBase64String(Ionic.Zlib.GZipStream.CompressBuffer(System.Text.Encoding.UTF8.GetBytes(str)));
ICSharpCode.SharpZipLib(不知道怎么设置压缩到zlib)
byte[] a = Encoding.Default.GetBytes(str);
MemoryStream memStreamIn = new MemoryStream(a);
MemoryStream outputMemStream = new MemoryStream();
ZipOutputStream zipStream = new ZipOutputStream(outputMemStream);
zipStream.SetLevel(3); //0-9, 9 being the highest level of compression
ZipEntry newEntry = new ZipEntry("zipEntryName");
newEntry.DateTime = DateTime.Now;
zipStream.PutNextEntry(newEntry);
StreamUtils.Copy(memStreamIn, zipStream, new byte[4096]);
zipStream.CloseEntry();
zipStream.IsStreamOwner = false; // False stops the Close also Closing the underlying stream.
zipStream.Close(); // Must finish the ZipOutputStream before using outputMemStream.
byte[] byteArrayOut = outputMemStream.ToArray();
return System.Convert.ToBase64String(byteArrayOut);
所有结果都不同,但 flash 会抛出错误 #2058:解压缩数据时出错。
var decode:ByteArray = Base64.decodeToByteArray(str);
decode.uncompress();
return decode.toString();
Base64 类来自这里 http://code.google.com/p/as3crypto/source/browse/trunk/as3crypto/src/com/hurlant/util/Base64.as?r=3
那么,如何在 .net 中压缩字符串并在 flash 中解压缩?
【问题讨论】:
标签: .net flash actionscript-3 string zlib