二进制文件读取的四个问题
读取二进制文件,该文件中有汉字、英文字母、数字、符号这四种类型
第一个问题:
BinaryReader br = new BinaryReader(brfs, Encoding.GetEncoding("gb2312"));
Encoding GB = Encoding .GetEncoding ("gb2312");
直接读取字符:
char[] chbuffer = new char[20];
chbuffer = br.ReadChars(2);
显示两个汉字:中国,分别存在char[1]和char[2]中
byte[] bt = new byte[2];
bt = br.ReadBytes(2);
str = GB.GetString(bt);
显示一个汉字:中
问题:char类型在二进制文件中占2个字节?我查资料怎么说是C#的char是一个字节
第二个问题:
读完“中国”这两个汉字后,接下来是个int的数字,读取方法为:
bt = br.ReadBytes(4);
str = GB.GetString(bt);
Console.WriteLine(bt.ToString());
显示为:System.Byte[]
为什么不能正确显示数字呢?因为我想数字也是gb2312编码里的一部分啊!
第三个问题:
上边的不能正常读取数字,但是这样可以:
int i = br.ReadInt32();
Console.WriteLine(i.ToString());
不知道为什么?
我的理解:Binaryreader.readint32是先调用binaryreader.readbyte(4),再用“gb2312”进行编码,不知道我理解的对不对?
第四个问题:
关于FileStream 和BinaryReader 的关系,如下:
FileStream brfs = File .OpenRead (BinAdd );
BinaryReader br = new BinaryReader(brfs);
可不可以这样理解:BinaryReader 是建立在FileStream 的基础之上的,当BinaryReader.ReadInt32()之后,用FileStream.Seek()对文件流的当前位置进行重新设置,往前挪4个字节,那么再次执行BinaryReader.ReadInt32(),是否所读结果和前一次的BinaryReader.ReadInt32()所读数据一样?