0

我正在创建一个二进制文件,为此我正在使用

namespace BinaryStream
{
    class Program
    {
        static void Main(string[] args)
        {
            string filename = @"c:\happybirthday.txt";
            using (BinaryWriter binWriter =
    new BinaryWriter(File.Open(filename, FileMode.Create)))
            {
                string name = "Sachin";
                string wishes = "happy birthday";

                binWriter.Write(name.ToCharArray());
                binWriter.Write(wishes.ToCharArray());
            }



        }
    }
}

如果使用 binWriter.Writer(name),则文件包含一些特殊字符。但是,如果我将字符串转换为 chararray 并写入文件,则该文件包含普通文本(没有任何特殊字符)。

这背后的原因是什么?

4

2 回答 2

2

重载以Write(string)长度为前缀:

从这里:http: //msdn.microsoft.com/en-us/library/yzxa6408.aspx

以长度为前缀的字符串通过在字符串前面加上一个包含该字符串长度的单个字节或单词来表示字符串长度。此方法首先将字符串的长度写入为 UTF-7 编码的无符号整数,然后使用 BinaryWriter 实例的当前编码将那么多字符写入流。

Write(char[])不是。当通过文本查看打开时,这些额外信息将显示为奇怪的数据。

在查看读取行为时,原因很明显。BinaryReader.ReadChars需要知道要读取多少个字符,同时BinaryReader.ReadString通过查看长度前缀来解决。

编辑:可能重复,额外信息无论如何:使用 System.IO.BinaryWriter 写入字符串与 char 数组的区别

于 2012-04-24T11:49:57.610 回答
1

BinaryWriter.Write(string) 写入第一个长度,然后将字符串写入文件。因此,您在文件中找到了指向该字符串长度的特殊字符。

此功能的 msdn 说明:

以长度为前缀的字符串通过在字符串前面加上一个包含该字符串长度的单个字节或单词来表示字符串长度。此方法首先将字符串的长度写入为 UTF-7 编码的无符号整数,然后使用 BinaryWriter 实例的当前编码将那么多字符写入流。

于 2012-04-24T12:16:31.903 回答