使用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
它不应该是二进制格式的东西吗?
答案 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表示。你在这里看到的是,对于你在该文件中写入的每条信息,还有一些用于编码该信息的信息。