网站首页 > 博客文章 正文
在相当多的情况下,咱们写入XML文件默认是使用文本格式来写入的,如果XML内容是通过网络传输,或者希望节省空间,特别是对于XML文档较大的情况,是得考虑尽可能地压缩XML文件的大小。
XmlDictionaryWriter类从XmlWriter类派生,它公开了一些静方法,可以直接创建基于文本、二进制和MTOM格式的XML写入对象。文本格式就不多说了,就是直接把XML内容写入文件,二进制和MTOM相似,都对文件内容进行压缩,说白了,是输出为纯字节形式。MTOM常用于读写SOAP消息。
我们可以做个例子来比较一下,看看以文本方式写入XML,以及以二进制方式写入XML,它们之间的差别有多大。
首先,定义一个枚举,用于决定是使用文本格式写入还是二进制格式写入。
public enum WriteFormat { Text, Binary }
然后写一个SaveXmlToFile方法,第一个参数是要保存的XML文件的路径,第二个参数是刚刚定义的枚举,用于确定写入格式。
public void SaveXmlToFile(string filepath, WriteFormat fmt) { using (FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write)) { // 创建Writer XmlDictionaryWriter writer = null; if (fmt == WriteFormat.Text) writer = XmlDictionaryWriter.CreateTextWriter(fs); else writer = XmlDictionaryWriter.CreateBinaryWriter(fs); // 写入文档声明 writer.WriteStartDocument; // 写入根节点 writer.WriteStartElement("宠物"); // 写入宠物子节点 writer.WriteStartElement("名字"); // <名字> writer.WriteString("荷兰兔"); writer.WriteEndElement; // 名字> writer.WriteStartElement("年龄"); // <年龄> writer.WriteString("2"); writer.WriteEndElement; // 年龄> // 直接Flush writer.Flush; writer.Dispose; } }
直接调用XmlDictionaryWriter的CreateXXXWriter方法,就可以得到一个XmlDictionaryWriter实例,XXX就看你要用的格式了,有Text、Binary、Mtom三种。
当使用非文本格式写入XML时,会把XML中的文本内容存到一个叫XmlDictionary的对象来存放字符串映射,可以手动指定XmlDictionary对象,其中存放的每个字符串实例都可以用XmlDictionaryString实例来包装。
如果我们不指定XmlDictionary实例,则Writer会自动创建,并把XML文档中的所有字符串对象(命名空间、元素名、特性名,以及文本节点的内容等)都放到XmlDictionary中映射为二进制内容。
如果后面没有要写入的内容了,可以直接调用Flush方法,它不仅可以把缓冲的内容写入流中,而且会自动补全XML元素的结束标签。
现在分别以文本格式和二进制格式写入XML文件。doc1.xml文件是文本格式写入的,doc2.xml是用二进制格式写入的,对比结果如下。
相同的内容,用文本格式保存,需要99个字节,而使用二进制格式则需要36个字节。
用记事本打开用二进制格式保存的XML文档,会看到如下内容。
打开文本格式保存的文件,可以直接看到内容。
好了,今天的废话就讲到这里吧,开饭了。
- 上一篇: 哪个大佬知道十六进制转二进制?
- 下一篇: 文本文件vs二进制文件,它们有什么区别?
猜你喜欢
- 2025-03-10 35岁非科班出身程序员写下C语言文件读写操作(详解),牛
- 2025-03-10 DWG怎么转换成DXF文件?网友们都在用这些超简单办法
- 2025-03-10 Redis 持久化策略浅析
- 2025-03-10 NET 8 中 序列化和序列化加密
- 2025-03-10 一日一技:python中的文件处理(01)
- 2025-03-10 放弃 Websocket 使用 SSE 才发现这些功能两三行代码就搞定了
- 2025-03-10 中小学综合素质 第一节 计算机基础知识
- 2025-03-10 隐写术重出江湖,这次是用来挖矿?
- 2025-03-10 文本文件vs二进制文件,它们有什么区别?
- 2025-03-10 哪个大佬知道十六进制转二进制?
你 发表评论:
欢迎- 376℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 371℃用AI Agent治理微服务的复杂性问题|QCon
- 364℃初次使用IntelliJ IDEA新建Maven项目
- 356℃Maven技术方案最全手册(mavena)
- 353℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 351℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 350℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 346℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)