笔记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

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签