转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
把握VB.NET中的流(Stream) (二)         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1616 更新时间:2009/4/23 19:01:05

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

灵活多样的IO操作

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

从二进制文件读数据的时候,首先创建一个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类有WriteWriteLine两种方法,都可以接受任何类型的数据作为参数写入文件(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对象。方法跟上面差不多,写数据同样用WriteWriteLine方法。Read方法读一个字符,ReadLine读一行数据(直到有回车/换行符为止),ReadToEnd读所有的字符,到文件结束。

对象序列化

到目前为止,我们只是把简单类型的数据写到文件中并读回程序。而实际上,大多数的程序读写的数据可能并不是简单类型,而是复杂的结构,例如:数组,数组列表,哈希表等。于是,我们采取一种成为序列化的技术,首先把数组的值转化为字节序列,然后写入文件,这样整个数组就存储下来。相反,我们称之为反序列化。

序列化是.NET的一个很大的话题,这列介绍一下基本的信息。

BinaryFormatterSerialize 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)

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

   Dim R As New Rectangle()

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

我们也可以以XmlFormatter进行对象序列化。首先在IDEProject菜单选择添加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)

[1] [2]  下一页


[VB.NET程序]把握VB.NET中的流(Stream) (三)  [VB.NET程序]把握VB.NET中的流(Stream) (一)
[Delphi程序]variant 和 Stream 的互換  [Web开发]用ADODB.Stream代替FSO读取文本文件
[Web开发]使用XMLHttp和ADODB.Stream取得远程文件并保存到本…  [Web开发]ASP中利用ADODB.Stream对象将字节流转换为字符流
[Web开发]用Adodb.Stream将以二进制方式保存在数据库中的文…  [Web开发]利用adodb.stream直接下载任何后缀的文件(防盗链)
[Web开发]adodb Stream 详细用法  [Web开发]关于Adodb.Stream的写数据库数据到客户端文件的实…
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台