MemoryStream.Read(byte[] buffer,int offset,int count)这个函数没有返回值,它的功能是把当前流的值读到这个byte[]数组里。也就是说,你在外面定义了一个byte[]数组,你调这个函数,这个byte数组就被赋值了。
这个很奇怪,我知道有out,或者ref修饰符可以实现这个的功能。但是这个函数貌似没有out,ref参数,所以超级奇怪。msdn上的原型是这样的:
public override int Read (
[InAttribute] [OutAttribute] byte[] buffer,
int offset,
int count
)
我看到这两个修饰符[InAttribute] [OutAttribute] 。不明白是什么意思。那是不是我以后写函数也可以用这两个修饰符???这两个修饰符具体怎么使用。求教达人。

解决方案 »

  1.   

    就是说 你在内存上分配一块区域然后把内存的地址传入 告诉函数 那块区域在那里
    然后函数里面 吧值给你添入到这块区域里面所以不用 out ref
      

  2.   

    流操作就是这种机制,buffer 是你预先开好的空间,read方法的作用就是把在当前流中从offset位置所引开始,读取count长度的byte[]进入到buffer数组中,这样buffer数组就得到了一定长度的二进制数据;同类的使用:
    字典 Dictionary.Keys.CopyTo(Array array)的作用是一致的,在你预先开好的内存空间中,把你获取的值填充进去;
      

  3.   

    这个月此类问题好多。
    byte是值类型,如果写
    public void Test(byte a) { a = 1; }
    调用
    byte a=0;
    Test(a);
    //此时a还是0。
    如果用ref修饰,则a会变为1.
    这个很容易理解。MemoryStream.Read(byte[] buffer,int offset,int count)
    byte[]是什么类型?你buffer.GetType().ToString()就可以看到了。是Array类型。这是个引用类型。意思是buffer指向一个byte的数组,可以通过buffer访问到这个数组。Read方法就是通过buffer访问数组的。所以不需要写ref或out。
    ref byte[]是什么意思呢?是说你传递的buffer是引用的引用。你可以在函数内指定buffer指向哪里
    byte[] a = new byte[0];//a.Length = 0;
    public void Test(ref byte[] buf){buf = new byte[1];}
    //a.Length = 1