笔记8:vb.net的二进制数据流BinaryReader、BinaryWriter_vb.netbinaryreader-程序员宅基地

技术标签: vb.net 输入输出I/O操作  二进制数据流  BinaryWriter  vb.net  BinaryReader  



           前面的FileStream、BufferedStream、MemoryStream类都是派生于Stream类。


           二进制数据流不同,它并不派生于Stream,而是直接派生于System.Object类。

           因此,天生不足,它只有串接到Stream类或派生类中进行操作,即二进制数据流的构造都要用Stream类。


           二进制数据流有两个类:BinaryReader和BinaryWriter


           它们有针对特定数据类型的专门读取方法。



一、BinaryReader类

      1、创建BinaryReader对象。

            BinaryReader本身不能创建对象,必须串接到Stream类型的数据流对象,才能进行创建读取相关操作。

    '基于所指定的流和特定的 UTF-8 编码,初始化 BinaryReader 类的新实例
    Public Sub New(input As Stream)

     '基于所指定的流和特定的字符编码,初始化 BinaryReader 类的新实例
    Public Sub New(input As Stream, encoding As Encoding)

        参数Stream指明的流的属性不能与BinaryReader冲突,比如此时是读,则流中应有读的特性。



      2、Read读取二进制数值

            每读一次,自动移动位置。

    '字符为单位,返回下一位读取的字符,位置下移一位。若是末尾返回-1
    Public Overridable Function Read() As Integer


        '以字节为单位读取,index缓冲区buffer的起始点,count长度。返回值:读取的个数
    Public Overridable Function Read(buffer As Byte(), index As Integer, count As Integer) As Integer


        '以字符为单位读取,
    Public Overridable Function Read(buffer As Char(), index As Integer, count As Integer) As Integer

          读取例子:

Imports System.IO
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim fs As New FileStream("D:\11.txt", FileMode.Open, FileAccess.Read, FileShare.Read)
        Dim br As New IO.BinaryReader(fs)
        TextBox1.Text = br.Read() '字符1,返回的是49(ASC码)
        TextBox1.Text &= Chr(br.Read()) '字符2,返回的是50(ASC码),这里chr将ASC转为字符
        br.Close()
        fs.Close()
    End Sub
End Class
         


        3、读取指定数据类型

             (1)读取字节

'从当前流中读取下一个字节,并使流的当前位置提升 1 个字节
Public Overridable Function ReadByte() As Byte    


'从当前流中读取指定的字节数以写入字节数组中,并将当前位置前移相应的字节数
Public Overridable Function ReadBytes(count As Integer) As Byte()
                  注意:如果数据位于数据流末尾将发生异常(下同)

              




             (2)读取整形:Short、Integer、Long

                   读取的本质都会转为.net framework的类型即:int16、int32、int64。因为他们占的字节分别是2,4,8

'从当前流中读取 2 字节有符号整数,并使流的当前位置提升 2 个字节
Public Overridable Function ReadInt16 As Short
 

'从当前流中读取 4 字节有符号整数,并使流的当前位置提升 4 个字节。
Public Overridable Function ReadInt32 As Integer    


    
'从当前流中读取 8 字节有符号整数,并使流的当前位置向前移动 8 个字节。
Public Overridable Function ReadInt64 As Long 
              
             咋一看,怎么不一样,把它转化成16进制看一下34 33 32  31  实际上就是字符4 3  2  1 的ASC码。
            注意:在读取对应数量字节时,若数据长度不足(如到了文件末),将发生错误。比如,离文件末还有2个字节时,读取为int32(4字节)将出错。




           (3)读取浮点型Decimal、Double、Single

'从当前流中读取十进制数值,并将该流的当前位置提升十六个字节。
Public Overridable Function ReadDecimal As Decimal
 

'从当前流中读取 8 字节浮点值,并使流的当前位置提升 8 个字节
Public Overridable Function ReadDouble As Double   


    
'从当前流中读取 4 字节浮点值,并使流的当前位置提升 4 个字节。
Public Overridable Function ReadSingle As Single


                   

               (4)读取字符型Char、String

                         Char是2个字节的单一Unicode,字符数值范围0--255;

                         String是一个以上Unicode字符组成的连续字符串。


'从当前流中读取下一个字符,并根据所使用的 Encoding 和从流中读取的特定字符,提升流的当前位置。
Public Overridable Function ReadChar As Char


'从当前流中读取指定的字符数,并以字符数组的形式返回数据,然后根据所使用的 Encoding 和从流中读取的特定字符,将当前位置前移。
Public Overridable Function ReadChars(count As Integer) As Char()



'从当前流中读取一个字符串。 字符串有长度前缀,一次 7 位地被编码为整数。
Public Overridable Function ReadString As String


               (5)特殊的预读:PeekChar

                    前面的读取,都会向前移动对应的位置,但有时只想查看前面字符,而又不想移动当前文件流的位置。

                    可以用PeekChar

                    ‘返回下一个可用的字符,并且不提升字节或字符的位置

              Public Overridable Function PeekChar As Integer



二、BinaryWriter类


             与BinaryReader类似,也须串接到数据流上。

           1、创建对象:

                  Public  Sub  New(ByVal   output  As  Stream)


          2、写入

                支持各种类型,同BinaryReader一样:


'各种数据类型
Public Overridable Sub Write (value As Boolean )
Public Overridable Sub Write (value As Byte )
Public Overridable Sub Write (ch As Char )
Public Overridable Sub Write (chars As Char() )
Public Overridable Sub Write (value As Decimal)
'...........



'字节数组
Public Overridable Sub Write ( _
	buffer As Byte(), _
	index As Integer, _
	count As Integer _
)

'字符数组
Public Overridable Sub Write ( _
	chars As Char(), _
	index As Integer, _
	count As Integer _
)





版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dzweather/article/details/12873067

智能推荐

Qt中如何将QComboBox中的选项StringItem与数值内联binding_qt combobox显示数值和实际值怎么绑定-程序员宅基地

文章浏览阅读501次。Qt中如何将QComboBox中的选项StringItem与数值内联binding开发文档中有两种方法第一种:第二种:这里介绍第二种(我认为更简单的一种)就用我目前做的一个小项目来说吧我的combo box中有各种各样的运动,每种运动自动内联着它所对应的一个小时所消耗的卡路里(int)consume::consume(QWidget *parent) : QDialog(parent), ui(new Ui::consume){ ui->setupUi(_qt combobox显示数值和实际值怎么绑定

最新大猿人中控充值系统 免授权学习版 支持公众号H5、分销等功能_猿人充值系统 3.2 漏洞-程序员宅基地

文章浏览阅读1.5k次。简介:最新大猿人中控充值系统 免授权破解版 支持公众号H5、分销等功能功能简介:大猿人中控系统目前是市面上用的最多的电话费充值中控系统,支持代理分销、公众号H5、API接口对接等功能,也是目前最完善的一款中控系统,前端全开源,已破解免授权!配置环境:php7.3 + Redis搭建教程:1、首先吧大猿人中控系统压缩包上传到服务器内进行解压,然后吧数据库文件导入数据库内2、修改/application/database.php 文件进行配置链接数据库。_猿人充值系统 3.2 漏洞

创建异形窗口[3]-程序员宅基地

文章浏览阅读81次。为什么80%的码农都做不了架构师?>>> ..._gtk3 异形窗口

C语言:验证下列矩阵是否为魔方阵。魔方阵是每一行、每一列、主副对角线上的元素之和都是相等的矩阵。-程序员宅基地

文章浏览阅读2.6k次。#include <stdio.h>#include <string.h>#include <string.h>int main(void){ int a[5][5] = {17,24,1,8,15, 23,5,7,14,16, 4,6,13,20,22, 10,12,19,21,3, 11,18,25._验证下列矩阵是否为魔方阵。魔方阵是每一行、每一列、主副对角线上的元素之和都是

Django疫情返乡人员管理系统-11411,计算机毕业设计开题选题+程序定制+论文书写+答辩ppt书写-原创(题目+编号)的定制程序-程序员宅基地

文章浏览阅读51次。免费领取项目源码,请关注赞收藏并私信博主,谢谢-本课题研究的疫情返乡人员管理系统,主要功能模块包括:防疫须知、疫情用品、返乡报备、用户反馈管理等,主要是主要采取Mysql作为后台数据的主要存储单元,运用软件工程原理和开发方法,采用Python的Django技术构建的,实现了系统的全部功能。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。

oracle序列中cache和nocache-程序员宅基地

文章浏览阅读1.1k次。首先我这篇博客的内容是我不知道oracle里的 cache 是什么,结果越查越多。。。“序列的cache通常为 20,但在需要依据序列值判断创建的先后顺序时必须是 NOCACHE”,关于这句话,是公司的数据库规范里提到的一句话,但是我感觉nocache会导致的问题好像还不少,所以我很纠结,但是除了根据序列值判断创建的先后顺序外,还有其他的靠谱的方式来判断先后顺序吗?难道入库时间不可以吗..._数据库中的nocache是什么意思

随便推点

您绝对不能错过的 10 个 OKR 示例!_优秀的okr案例-程序员宅基地

文章浏览阅读429次,点赞6次,收藏8次。在此基础上,制定团队 OKR,它可以是产品层面的或部门层面的,但它们会融入组织的目标中。使用 OKR 方法的一个巨大好处是,它可以针对不同的部门和团队进行细分, 以便整个公司追求相同的组织目标,但利用特定的关键结果。如果您没有达到 100% 的关键结果,您仍然应该为实现这一目标所付出的努力感到自豪,评估是否需要进行更改,并重新调整下一个周期的目标和关键结果。令人惊讶的是,伦敦商学院进行的一项研究显示,在接受调查的 11,000 名高级管理人员中,只有三分之一能够列出他们公司的三大优先事项。_优秀的okr案例

HDU 5350(MZL's munhaff function-哈夫曼树)_禎痲霤攷 hdu-程序员宅基地

文章浏览阅读2.1k次。MZL's munhaff functionTime Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 230 Accepted Submission(s): 133Problem DescriptionMZL is _禎痲霤攷 hdu

AndroidStudio4.1 自定义模板_android studio 4.1 自定义模板-程序员宅基地

文章浏览阅读1.3k次。AndroidStudio4.0之前,可以在template的文件夹里使用freemarker的自定义模板,可以在AndroidStudio的文件夹中,随意的添加适合自己的自定义模板,之前鸿洋大神的文章已经有来详细的介绍(https://blog.csdn.net/lmj623565791/article/details/51592043)。但是从4.1版本开始提供新的方式,Geminio,用Kotlin的形式编写新的template,而且需要使用插件的形式,才能使用自定义的模板,摸索了好几天,终于解决了_android studio 4.1 自定义模板

微信小程序云开发-酒店点餐类系统,附带(node.js在widows环境下的配置过程)_云开发可以做扫码类么-程序员宅基地

文章浏览阅读3.2k次,点赞3次,收藏11次。前些日子,帮一个学生做了一个毕业设计,是关于酒店点餐的微信小程序,现在整理一下过程。本款小程序是基于微信云开发的,现在做微信小程序的一大方便是:微信给大家提供了免费空间(云开发),对于不想花钱去租用服务器和域名的小伙伴儿来说,这无疑是一大喜事! 本款小程序非常适合商城类小程序的二次开发或是学习商城类小程序最佳的一个案例。废话不多说,直接上图:小程序..._云开发可以做扫码类么

jq使用ajax报错404,jQuery中ajax错误调试分析-程序员宅基地

文章浏览阅读1.8k次。jQuery中把ajax封装得非常好。但是日常开发中,我偶尔还是会遇到ajax报错。这里简单分析一下ajax报错一般的jQuery用法如下,ajax通过post方式提交"汤姆和老鼠"这段数据到xxx.php文件中。成功后则打印返回的数据,失败则打印错误原因。$.ajax({url:"xxx.php",type:"post",datatype:"json",data:{"cat":"tom","mo..._jquery ajax保存数据到后端flask,出现404not found错误

HDU 1587 Flowers 解题报告_2019 flowers acm-程序员宅基地

文章浏览阅读1.3k次。动态规划 完全背包_2019 flowers acm