底层所有文件都存储为字节,所以从某种意义上说,你所说的是正确的。但是,如果您打开一个打算以二进制形式读取的文件并尝试在文本编辑器中读取它,它会看起来像乱码。
程序如何知道是以文本形式还是以二进制形式读取文件?(即作为特殊的 ASCII 或其他编码字节集,或者只是作为具有不同表示的底层字节)?
好吧,它不知道——它只是按照它所说的去做。
在 Windows 中,您.txt
在记事本中打开文件 - 记事本期望读取文本。尝试在记事本中打开一个二进制文件。它会打开,你会看到东西,但它会是垃圾。
如果您正在编写自己的程序,如果您想将所有内容存储为二进制文件,则可以使用编写BinaryWriter
和读取使用。BinaryReader
如果你写 usingBinaryWriter
和读 using会发生什么StringReader
?
回答你的具体例子:
using (var test = new BinaryWriter(new FileStream(@"c:\test.bin", FileMode.Create)))
{
test.Write(10);
test.Write("hello world");
}
using (var test = new BinaryReader(new FileStream(@"c:\test.bin", FileMode.Open)))
{
var out1 = test.ReadInt32();
var out2 = test.ReadString();
Console.WriteLine("{0} {1}", out1, out2);
}
看看你必须如何以与所写相同的顺序阅读?该文件没有告诉你任何事情。
现在切换第二部分:
using (var test = new BinaryReader(new FileStream(@"c:\test.bin", FileMode.Open)))
{
var out1 = test.ReadString();
var out2 = test.ReadInt32();
Console.WriteLine("{0} {1}", out1, out2);
}
你会得到胡言乱语(如果它有效的话)。然而,文件中没有任何内容可以预先告诉您。那里没有特别的信息。程序必须根据一些带外信息(某种规范)知道要做什么。