首页 > 解决方案 > BinaryWriter 写出有趣的字符

问题描述

下面是代码:

using (FileStream fs = File.Create("data.txt"))
using (BinaryWriter bw = new BinaryWriter(fs))
{
   int num = 2019;
   bw.Write(num);
}

当我用编辑器打开 data.txt 时,我只看到一个有趣的字符。所以我的问题是:

Q1-这是因为我的编辑器的编码是 UTF-8 与 BinaryWriter 格式不兼容吗?我应该使用哪种编码方案才能在文本文件中看到 2019 年法案?

Q2-BinaryWriter 相对于其他流适配器(如 StreamWriter)的实际用途是什么?对我来说 BinaryWriter 做了一些奇怪的事情,例如,你使用 BinaryWriter 先写一个 int,然后写一个字符串......,然后当你用 BinaryReader 读取文件时,你必须做 ReadInt32() 然后 ReadString( ),你不能弄乱序列,如果你做 ReadString(),你会得到一个有趣的角色。但是谁会“记住”或知道要阅读的序列?

标签: c#.netio

解决方案


这都是文件格式的问题。

当您使用 StreamWriter 时,您的输出将是可读的文本,这意味着您可以在编辑器中看到里面的内容。例如,您可以编写一个 bool"true""false" 使用二进制编写器时,该值存储在其二进制表示形式中,对于布尔值,该表示形式为 0 或 1。请注意,"0"如果您愿意,可以在文本文件中写入 true。

在记住里面的内容时,要么使用自我描述的文件格式,例如带有标题的 csv,要么必须使用标准格式(例如 MP3,您可以在网上找到描述),或者您必须同时编写 reader 和 writer 以确保它们匹配(即使是文本格式)。

例如,通过查看"0,0"您无法判断它的两个布尔值是用逗号分隔还是法语格式的数字 0 具有一位精度。


推荐阅读