我试图读取二进制文件,它是以某种模式编写的,例如:string, string, byte
我在网上浏览并找到了这段代码:
while (br.BaseStream.Position<br.BaseStream.Length)
{
br.ReadString();
br.ReadString();
br.ReadByte();
}
即使代码很简单,我也无法理解底层流(BaseStream)的含义?有人可以给我一个简短的解释吗?
答案 0 :(得分:4)
.NET提供了不同的对象来读取或写入数据。基本上有DataWriters和DataReader可以写入或读入不同的流。 Streams表示数据源(例如文件)与应用程序内存(或后面)之间的数据流。
要以定义的方向访问流,您可以使用读者或编写者。 BinaryReader
是数据阅读器的一个示例。它应该从流中读取二进制数据。流通常从名为Stream
的基类继承。存在表示不同数据源的不同类型的流。例如,FileStream
将数据读取或写入HDD上的文件,而MemoryStream
将数据读取或写入RAM。因此,流的实现描述存储数据的位置。
DataReader或DataWriters描述如何存储数据。例如,您的BinaryReader
读取字节序列,而TextReader
读取具有给定编码的文本。但两者都可以使用相同的流。
回到你的问题:你的BinaryReader
从流中读取二进制数据。 BaseStream
属性返回读取器从中读取数据的流的实例。这就是您需要使用流实例初始化BinaryReader
的原因。您无法告诉计算机从任何地方读取二进制数据! ;)