MemoryStream的问题 memorystream的getbuffer()和toarray()方法有什么区别?在使用的时候要注意什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 但是我用一个byte数组生成一个memorystream的实例,使用toarray()可以正常输出字节流,但是用getbuffer()就不行 了 getbuffer显然是获取自身使用的数组,而toarray是提供一个数组的副本,复制了一份出来。如果使用getbuffer,那么要获取完整的数组,需要flush后,才能去获取,否则可能数据还没更新就被你获取了。 看一段代码: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。 byte[] buf1 = new byte[1024];MemoryStream ms = new MemoryStream(buf1,0,buf1.Length,true,true); // 第5个参数是trueint l=ms.GetBuffer().Length; // 返回创建此流所用的字节数组 buf1byte[] buf2 = ms.ToArray(); // 将整个流内容写入字节数组--创建新字节数组。 使用flush()还是不可以 使用含有五个参数的构造函数就OK了 关于线程控制随机数的一个问题``请大侠帮个忙 C# 怎样把一个数据表中的记录添加到另一个数据表中 nhibernate连接access数据库出问题 关于备份的问题 遇到一个比较纠结的问题! 不能命中断点是什么原因 泛型怎么线程同步? 有关C#第一次问,运行HELLO速度很慢 大家一同讨论如何做一个UI来实现类似Dreamweaver中的表格的编辑 C#怎么用代码控制键盘按键。 如何实现 点击treeview当前节点 触发事件? C# Session 问题理解不了,请求帮忙
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。
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(); // 将整个流内容写入字节数组--创建新字节数组。
使用flush()还是不可以 使用含有五个参数的构造函数就OK了