C#中的BinaryWriter如何保存其内容?

时间:2013-08-24 13:55:07

标签: c# binarywriter

使用c#创建了一个二进制文件:我使用的代码就是这个

     try            
         {
            Console.WriteLine("Binary Writer");

       using (BinaryWriter b = new BinaryWriter(File.Open("C:\\file.bin",FileMode.Create)))
            {  
                b.Write("world");
                b.Write("god");
                b.Write("its cool");
                b.Write("1000");
                b.Flush();
            }

        }
        catch (IOException ioexp)
        {
            Console.WriteLine("Error: {0}", ioexp.Message);
        }
    }

我看到的输出文件 -

世界(这里有些人)上帝(这里有些人)很酷(这里有点)1000

它不应该是二进制格式的东西吗?

3 个答案:

答案 0 :(得分:3)

大多数简单的值类型都很容易转换为二进制。它们具有可以表示其值的固定字节数。像字节类型的变量可以写为单个字节。 int可以写为4个字节。十进制可以写为16个字节。等等。

但字符串很棘手,它们的长度可变。所以BinaryWriter必须做一些额外的事情来确保可以从文件中再次读回字符串。这是您在文件中看到的(SOMETHING HERE)。它存储字符串的长度。后跟字符串中的字符。

现在BinaryReader很容易读回字符串。它首先读取长度,然后它知道要读取多少个字符。

请注意,这也意味着只能使用BinaryReader读回该文件。当您编写另一个程序应该读取的文件时,这往往会成为一个问题。这意味着你永远不应该使用Write(字符串)方法。通常你会使用Write(byte [])代替。使用正确的编码生成该字节[]。

答案 1 :(得分:1)

文本不会出现不同的输出到二进制文件中。文本与您在BinaryWriter实例中指定的编码一起存储。在您的情况下,由于未指定,因此根据MSDN page for BinaryWriter默认为UTF-8。

您在每个字符串之间看到的是length prefixed to each string as a UTF-7 encoded unsigned integer。由于这个数字在"二进制"格式,它将显示为该值的UTF-8表示。

尝试在十六进制编辑器中打开文件,您将确切地看到BinaryWriter如何写入字符串。

答案 2 :(得分:0)

实际上该文件是二进制格式。每个文件都是二进制格式,文本文件和数据文件之间的区别在于文本文件,每个字节将直接映射到它的char表示。你在这里看到的是,对于你在该文件中写入的每条信息,还有一些用于编码该信息的信息。