WCF技术内幕 第5章 (3)

本文介绍如何使用XMLDictionary进行数据压缩,通过将元素名和XML命名空间替换成单个字节来减少二进制编码的大小。展示了使用与不使用XMLDictionary压缩时的数据大小对比。

使用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替换成单个字节。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值