内存数据流
内存数据流,就是利用内存作为数据的存储区,此时可把这块内存区当作是文件。
它同样派生于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, 0, 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流进行读和写;