加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 08:06:09 所属栏目:百科 来源:网络整理
导读:内存数据流 内存数据流,就是利用内存作为数据的存储区,此时可把这块内存区当作是文件。 它同样派生于Stream类,也具有Read与Write的方法。 MemoryStream类的构造方法几个 可以根据指定大小创建一个内存区域(流),例子用此方法 也可以根据缓冲数据创建一


内存数据流


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

它同样派生于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流进行读和写;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读