memorystream的getbuffer()和toarray()方法有什么区别?在使用的时候要注意什么?

解决方案 »

  1.   

    但是我用一个byte数组生成一个memorystream的实例,使用toarray()可以正常输出字节流,但是用getbuffer()就不行 了  
      

  2.   

    getbuffer显然是获取自身使用的数组,而toarray是提供一个数组的副本,复制了一份出来。如果使用getbuffer,那么要获取完整的数组,需要flush后,才能去获取,否则可能数据还没更新就被你获取了。
      

  3.   

    看一段代码:byte[] buffer = new byte[3] { 3,4,5};
                MemoryStream ms = new MemoryStream(buffer, 0, buffer.Length, true, true);
                byte[] bs = ms.GetBuffer();
                foreach (byte b in bs)
                {
                    Console.WriteLine(b);
                }
                ms.Close();MemoryStream构造函数有5个重载
    要使GetBuffer函数可用,用5个参数的构造函数,原型如下:
    public MemoryStream(
    byte[] buffer,
    int index,
    int count,
    bool writable,
    bool publiclyVisible
    )各参数意义如下:
    buffer
    类型:array<System..::.Byte>[]()[]从中创建该流的无符号字节数组。index
    类型:System..::.Int32buffer 内的索引,流从此处开始。count
    类型:System..::.Int32流的长度(以字节为单位)。writable
    类型:System..::.BooleanCanWrite 属性的设置,确定流是否支持写入。publiclyVisible
    类型:System..::.Boolean设置为 true 可以启用 GetBuffer,它返回无符号字节数组,流从该数组创建;否则为 false。

      

  4.   


    byte[] buf1 = new byte[1024];
    MemoryStream ms = new MemoryStream(buf1,0,buf1.Length,true,true);  // 第5个参数是true
    int l=ms.GetBuffer().Length;  // 返回创建此流所用的字节数组 buf1
    byte[] buf2 = ms.ToArray();   // 将整个流内容写入字节数组--创建新字节数组。
      

  5.   


    使用flush()还是不可以  使用含有五个参数的构造函数就OK了