vb.net:把握VB.NET中的流(Stream) (二)



把握VB.NET中流(Stream) ( 2)

灵活多样IO操作
有时候在数据和字节的间转换是件繁琐事情为了避免这些无聊转换和简化代码采用StreamReader/StreamWrite和BinaryReader/BinaryWriter不愧为明智的举StreamReader/StreamWrite分别由TextReader/TextWriter类派生自动执行字节编码转换BinaryReader/BinaryWriter由Stream派生主要以 2进制形式读写数据
从 2进制文件读数据时候首先创建个BinaryReader例子BinaryReader构建接受个FileStream对象代表将要读文件我们前面已经看过可以用File.OpenRead 或者 File.OpenWrite 思路方法创建FileStream对象
如下所示:
Dim BR As New IO.BinaryReader(IO.File.OpenRead(path))
Dim BW As New IO.BinaryWriter(IO.File.OpenWrite(path))
BinaryWriter类有Write和WriteLine两种思路方法都可以接受任何类型数据作为参数写入文件(WriteLine在文件尾追加行数据)BinaryReader类有很多读数据思路方法数据存储在文件上时候并没有任何有关自己类型信息所以读数据时候必须选择合适重载Read思路方法
下面例子假设BW是个已经化过BinaryWriter对象表示如何写串、整数、双精度数字到文件:
BW.WriteLine(\"A String\")
BW.WriteLine(12345)
BW.WriteLine(123.456789999999)
读回数据时候必须选择BinaryReader合适Read思路方法:
Dim s As String = BR.ReadString
Dim i As Int32 = BR.ReadInt32
Dim dbl As Double = BR.ReadDouble
对于文本文件采用StreamReader/StreamWriter对象思路方法跟上面差不多写数据同样用Write和WriteLine思路方法Read思路方法读ReadLine读行数据(直到有回车/换行符为止)ReadToEnd读所有到文件结束
对象序列化
到目前为止我们只是把简单类型数据写到文件中并读回而实际上大多数读写数据可能并不是简单类型而是复杂结构例如:列表哈希表等于是我们采取种成为序列化技术首先把值转化为字节序列然后写入文件这样整个就存储下来相反我们称的为反序列化
序列化是.NET个很大话题这列介绍下基本信息
用BinaryFormatterSerialize 和 Deserialize思路方法把个对象保存到文件和读回首先imports .RunTime.Serialization.Formatters免得写那么长申明Formatters名空间包含了BinaryFormatter类用于以 2进制数据序列化对象
创建BinaryFormatter例子接着Serialize思路方法Serialize接受两个参数:个是可写FileStream例子用于保存数据文件;另外个是对象本身:
Dim BinFormatter As New Binary.BinaryFormatter
Dim R As New Rectangle(10, 20, 100, 200)
BinFormatter.Serialize(FS, R)
BinaryFormatterDeserialize思路方法只有个参数FileStream例子在当前位置反序列化得到个类型不明对象我们必须用Ctype转换为原来对象下面例子反序列化上面文件得到原来Rectangle对象:
Dim R As New Rectangle
R = CType(BinFormatter.Deserialize(FS), Rectangle)
我们也可以以XmlFormatter进行对象序列化首先在IDEProject菜单选择添加.Runtime.Serialization.Formatters.Soap然后就可以进行创建SoapFormatter对象了思路方法跟BinFormatter只不过数据存储采用XML格式:
Dim FS As New IO.FileStream(\"c:\\Rect.xml\", IO.FileMode.Create, IO.FileAccess.Write)
Dim XMLFormatter As New SoapFormatter
Dim R As New Rectangle(8, 8, 299, 499)
XMLFormatter.Serialize(FS, R)
打开c:\\Rect.xml 实际上里面存储了这些内容:
- <SOAP-ENV:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:clr=\"http://schemas.microsoft.com/soap/encoding/clr/1.0\" SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">
- <SOAP-ENV:Body>
- <a1:Rectangle id=\"ref-1\" xmlns:a1=\"http://schemas.microsoft.com/clr/nsassem/.Drawing/.Drawing%2C%20Version%3D1.0.3300.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Db03f5f7f11d50a3a\">
<x>8</x>
<y>8</y>
<width>249</width>
<height>499</height>
</a1:Rectangle>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Tags:  vb.net源码 vb.net语法 vb.net教程 vb.net

延伸阅读

最新评论

发表评论