分享
 
 
 

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

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

灵活多样的IO操作

有时候,在数据和字节数组之间转换是一件繁琐的事情。为了避免这些无聊的转换和简化代码,采用StreamReader/StreamWrite和BinaryReader/BinaryWriter不愧为明智之举。StreamReader/StreamWrite分别由TextReader/TextWriter类派生,自动执行字节编码的转换。BinaryReader/BinaryWriter由Stream派生,主要以二进制的形式读写数据。

从二进制文件读数据的时候,首先创建一个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的一个很大的话题,这列介绍一下基本的信息。

用BinaryFormatter的Serialize 和 Deserialize方法把一个对象保存到文件和读回程序。首先,imports System.RunTime.Serialization.Formatters,免得写那么长的申明。Formatters名空间包含了BinaryFormatter类,用于以二进制的数据序列化对象。

创建BinaryFormatter实例,接着调用Serialize方法,Serialize接受两个参数:一个是可写的FileStream实例,用于保存数据的文件;另外一个是对象本身:

Dim BinFormatter As New Binary.BinaryFormatter()

Dim R As New Rectangle(10, 20, 100, 200)

BinFormatter.Serialize(FS, R)

BinaryFormatter的Deserialize方法只有一个参数,FileStream实例。在当前位置,反序列化得到一个类型不明的对象,我们必须用Ctype转换为原来的对象。下面的例子反序列化上面的文件得到原来的Rectangle对象:

Dim R As New Rectangle()

R = CType(BinFormatter.Deserialize(FS), Rectangle)

我们也可以以XmlFormatter进行对象序列化。首先在IDE的Project菜单选择添加System.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/System.Drawing/System.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>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有