使用XmlDictionary
using (MemoryStream stream = new MemoryStream())
{
XmlDictionary xd =new XmlDictionary();
List<XmlDictionaryString> stringList = new List<XmlDictionaryString>();
stringList.Add(xd.Add("Person"));
stringList.Add(xd.Add("urn:Andersoft"));
using (XmlDictionaryWriter xtw = XmlDictionaryWriter.CreateBinaryWriter(stream, xd, null))
{
xtw.WriteElementString(stringList[0], stringList[1], "Mike");
xtw.Flush();
Console.WriteLine("XmlDictionaryWriter wrote {0} bytes", stream.Position); //10
stream.Position = 0;
Byte[] bytes = stream.ToArray();
File.WriteAllText(@"c:\file.txt", BitConverter.ToString(bytes));
//42-00-0A-02-99-04-4D-69-6B-65
File.WriteAllText(@"c:\file1.txt", new StreamReader(stream).ReadToEnd());
//BȊ뿯ҽ楍敫
}
}使用XMLDictionary压缩过的二进制编码只有10个byte。
using (MemoryStream stream = new MemoryStream())
{
using (XmlDictionaryWriter xtw = XmlDictionaryWriter.CreateBinaryWriter(stream, null, null))
{
xtw.WriteElementString("Person", "urn:Andersoft", "Mike");
xtw.Flush();
Console.WriteLine("XmlDictionaryWriter wrote {0} bytes", stream.Position); //29
stream.Position = 0;
Byte[] bytes = stream.ToArray();
File.WriteAllText(@"c:\file.txt", BitConverter.ToString(bytes));
//40-06-50-65-72-73-6F-6E-08-0D-75-72-6E-3A-41-6E-64-65-72-73-6F-66-74-99-04-4D-69-6B-65
File.WriteAllText(@"c:\file1.txt", new StreamReader(stream).ReadToEnd());
//@Person
//urn:Andersoft�Mike
}
}没有使用XMLDictionary压缩过的二进制编码要29个byte,比用XMLDictionary压缩过的二进制编码byte数多了19个。。。
如果使用XMLDictionary,它会直接记录element和attribute的值,但是会把stream中的element name和XML namespaces替换成单个字节。
本文介绍如何使用XMLDictionary进行数据压缩,通过将元素名和XML命名空间替换成单个字节来减少二进制编码的大小。展示了使用与不使用XMLDictionary压缩时的数据大小对比。
477

被折叠的 条评论
为什么被折叠?



