技术标签: 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)
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
(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 _
)
文章浏览阅读501次。Qt中如何将QComboBox中的选项StringItem与数值内联binding开发文档中有两种方法第一种:第二种:这里介绍第二种(我认为更简单的一种)就用我目前做的一个小项目来说吧我的combo box中有各种各样的运动,每种运动自动内联着它所对应的一个小时所消耗的卡路里(int)consume::consume(QWidget *parent) : QDialog(parent), ui(new Ui::consume){ ui->setupUi(_qt combobox显示数值和实际值怎么绑定
文章浏览阅读1.5k次。简介:最新大猿人中控充值系统 免授权破解版 支持公众号H5、分销等功能功能简介:大猿人中控系统目前是市面上用的最多的电话费充值中控系统,支持代理分销、公众号H5、API接口对接等功能,也是目前最完善的一款中控系统,前端全开源,已破解免授权!配置环境:php7.3 + Redis搭建教程:1、首先吧大猿人中控系统压缩包上传到服务器内进行解压,然后吧数据库文件导入数据库内2、修改/application/database.php 文件进行配置链接数据库。_猿人充值系统 3.2 漏洞
文章浏览阅读81次。为什么80%的码农都做不了架构师?>>> ..._gtk3 异形窗口
文章浏览阅读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._验证下列矩阵是否为魔方阵。魔方阵是每一行、每一列、主副对角线上的元素之和都是
文章浏览阅读51次。免费领取项目源码,请关注赞收藏并私信博主,谢谢-本课题研究的疫情返乡人员管理系统,主要功能模块包括:防疫须知、疫情用品、返乡报备、用户反馈管理等,主要是主要采取Mysql作为后台数据的主要存储单元,运用软件工程原理和开发方法,采用Python的Django技术构建的,实现了系统的全部功能。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。
文章浏览阅读1.1k次。首先我这篇博客的内容是我不知道oracle里的 cache 是什么,结果越查越多。。。“序列的cache通常为 20,但在需要依据序列值判断创建的先后顺序时必须是 NOCACHE”,关于这句话,是公司的数据库规范里提到的一句话,但是我感觉nocache会导致的问题好像还不少,所以我很纠结,但是除了根据序列值判断创建的先后顺序外,还有其他的靠谱的方式来判断先后顺序吗?难道入库时间不可以吗..._数据库中的nocache是什么意思
文章浏览阅读429次,点赞6次,收藏8次。在此基础上,制定团队 OKR,它可以是产品层面的或部门层面的,但它们会融入组织的目标中。使用 OKR 方法的一个巨大好处是,它可以针对不同的部门和团队进行细分, 以便整个公司追求相同的组织目标,但利用特定的关键结果。如果您没有达到 100% 的关键结果,您仍然应该为实现这一目标所付出的努力感到自豪,评估是否需要进行更改,并重新调整下一个周期的目标和关键结果。令人惊讶的是,伦敦商学院进行的一项研究显示,在接受调查的 11,000 名高级管理人员中,只有三分之一能够列出他们公司的三大优先事项。_优秀的okr案例
文章浏览阅读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
文章浏览阅读1.3k次。AndroidStudio4.0之前,可以在template的文件夹里使用freemarker的自定义模板,可以在AndroidStudio的文件夹中,随意的添加适合自己的自定义模板,之前鸿洋大神的文章已经有来详细的介绍(https://blog.csdn.net/lmj623565791/article/details/51592043)。但是从4.1版本开始提供新的方式,Geminio,用Kotlin的形式编写新的template,而且需要使用插件的形式,才能使用自定义的模板,摸索了好几天,终于解决了_android studio 4.1 自定义模板
文章浏览阅读3.2k次,点赞3次,收藏11次。前些日子,帮一个学生做了一个毕业设计,是关于酒店点餐的微信小程序,现在整理一下过程。本款小程序是基于微信云开发的,现在做微信小程序的一大方便是:微信给大家提供了免费空间(云开发),对于不想花钱去租用服务器和域名的小伙伴儿来说,这无疑是一大喜事! 本款小程序非常适合商城类小程序的二次开发或是学习商城类小程序最佳的一个案例。废话不多说,直接上图:小程序..._云开发可以做扫码类么
文章浏览阅读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错误
文章浏览阅读1.3k次。动态规划 完全背包_2019 flowers acm