笔记6:vb.net的内存数据流MemoryStream、缓冲数据流BufferedStream


内存数据流


内存数据流,就是利用内存作为数据的存储区,此时可把这块内存区当作是文件

它同样派生于Stream类,也具有Read与Write的方法

MemoryStream类的构造方法几个

可以根据指定大小创建一个内存区域(流),例子用此方法

也可以根据缓冲数据创建一个内存区域(流)

Public Sub New ( buffer As Byte(),index As Integer,count As Integer,writable As Boolean )


下面是内存流与文件流的区别(下面文件流标错,应该是文件,其上下箭头才是文件流)

通常两个的联系是通过一个数组(缓冲)这个搬运工来联系。




对于一块内存块,有两个有用的成员:

ToArray 把内存块的数据转化成一个数组

Writeto 把数据(字节或数组)写入到内存块中。


下例:用文件流与内存流操作文件

利用文件流来填充数组btAll,然后取数组部分数据填充内存块(内存流写),最后直接把内存块转为数组来显示

    Private Sub Button2_Click(sender As Object,e As EventArgs) Handles Button2.Click
        Dim btArray(3) As Byte
        Dim btAll As Byte()  '装载整个文件字节
        Dim ms As New MemoryStream(4)
        Dim fs As New FileStream("D:\11.txt",FileMode.Open,FileAccess.Read)

        ReDim btAll(fs.Length)
        fs.Read(btAll,fs.Length)
        ms.Write(btAll,5,4) '相当把文件中第5位置起4个字节写入内存

        btArray = ms.ToArray '把内存转存到数组中
        TextBox2.Text = Encoding.ASCII.GetString(btArray)

        ms.Close()
        fs.Close()
    End Sub







缓冲数据流



一、为什么要缓冲数据流(内存数据流)

文件流它的数据源或目的地都是文件,它们都涉及到文件的打开与关闭等操作。


但是,对于一些特殊的I/O来说,并不适合。比如,数据打印操作,程序将数据放到打印队列中等待打印,

此时缓冲区就被作为了数据源,它取代一般的数据存储装置(比如文件),是缓冲区进行了数据的存取。

显然这时用文件流来操作是不适合的。


在网络传输中,缓冲数据流也起到很好的作用。



二、什么是缓冲数据流?

缓冲区是内存中的一块保留区域,专门用以存储应用程序执行所产生的暂存数据。

比如前面文件流中缓冲数据,也充当着缓冲的功能,也叫缓冲数组。


利用缓冲区进行数据读写,可以大提升数据存取交通,并且同时减少打开、关闭文件所耗用的资源。


.Net对于缓冲区数据的存取操作,由BufferedStream类完成。

BufferedStream类派生于Stream类,其数据读写方法与FileStream类似。



三、缓冲数据流的构造与方法

BufferedStream类以另一个数据流对象作为初始化底层数据流来源,如:

Public Sub New ( ByVal stream as Stream)


也可以是下面构造:

Public Sub New ( ByVal stream As Stream,ByVal bufferSize As Integer)


上面对象一旦建立后,便 可利用内存缓冲区存取底层数据,因此不需要针对stream连接的设备进行操作。


上面两个构造函数,都将使用预设的缓冲区大小,第一个认是4096字节,第二个是自定义



BufferedStream与FileStream一样,提供相同的数据读写方法

但要注意: 不能同时对BufferedStream流进行读和写;

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...