C#二进制阅读器工作异常
当我调用C#二进制阅读器工作异常,c#,methods,io,stream,C#,Methods,Io,Stream,当我调用ReadByte时,将执行一个重写的Read方法 代码在这里 public object Read(Stream s) { Issues.Clear(); if (AutoReset) Reset(); using (var r = new BinaryReader(s, Encoder, true)) { // check stream begin if (r.ReadByte() != StreamB
ReadByte
时,将执行一个重写的Read
方法
代码在这里
public object Read(Stream s)
{
Issues.Clear();
if (AutoReset)
Reset();
using (var r = new BinaryReader(s, Encoder, true))
{
// check stream begin
if (r.ReadByte() != StreamBegin) // this r.ReadByte() goto..
{
这里我调用ReadByte
。此BinaryReader
来自System.IO
接下来的ReadByte()
方法转到这里
public override int Read(byte[] buffer, int offset, int count)
{
..... Something
}
此方法位于自定义类中
调用堆栈位于此处:
所以。。为什么会发生这种情况?为什么这段代码是这样工作的?ReadByte()调用Read()并将位置移到下一个。所以Read()方法在自定义类中被重写,所以ReadByte()转到重写的Read()方法
ReadByte()
显然是根据Read(byte[],int,int)
实现的。这真的让你大吃一惊吗?那是什么类的覆盖?ReadByte()
在其代码中调用Read(byte[],int,int)
,这是正常的,因为ReadByte()
所做的一切都是读取下一个字节,然后推进流。ReadByte
实现自己版本的Read
代码并没有什么真正的优势。…@Jeff Mercado,Clasies ReadByte是从“public class InstanceSerializer”“namespace EMx.Serialization”调用的,ReadByte调用的Read方法是在“public class MxStream”“namespace EMx.IO.MxData”上的。“公共类InstanceSerializer”没有使用“EMx.IO.MxData”。我想知道这些独立班级是如何合作的?