
把一个对象序列化到文件的时候,是以二进制格式写的。
这并不意味着它不可读--只是紧凑而已。你打开序列化对象的文件的时候你可以识别里面的字符串的原因就是因为C#把字符串写入到文件的最紧凑的方式就是作为字符串写入。但如果把数字作为字符串写入文件的话就太浪费了。任何int都可以用四个字节存储起来。所以如果C#把数字49,369,144以你可以阅读的方式作为八个字符(算上逗号就是十个字符)的字符串写入文件的话,那就太浪费空间了!

.NET使用Unicode来把字符或者字符串编码到字节。很幸运,Windows有一个很有用的工具可以帮你来搞明白Unicode如何工作。打开字符映射表(它在开始菜单内的附件之内,或者在cmd中输入“charmap.exe”)。
当你看全世界中这些语言中所有字母和符号的时候,你就可以意识到要向文件中写入文本需要多少不同的东西。所以.NET把其字符串编码为Unicode。编码意味着把逻辑数据(比如字母H)转换为字节(比如72)。之所以这么设计是因为字母,数字,枚举和其他数据在内存和硬盘上都以字节的形式存在。这正是字符映射表的有用之处--它向你展示了字符是如何转换为数字的。

本文介绍了C#中对象序列化的原理及其文件格式,解释了为什么序列化后的文件虽然以二进制形式存储但仍可识别其中的字符串。同时探讨了.NET如何使用Unicode编码来处理字符串,并提供了一个实用工具——字符映射表来帮助理解Unicode的工作机制。
937

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



