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

 
把握VB.NET中的流(Stream) (一)
当你第一次用 VB.NET 读写文件的时候,你肯定会发现 VB.NET 摒弃了传统的文件 I/O 支持,感觉不习惯。其实,在 .NET 里面,微软用丰富的“流”对象取代了传统的文件操作,而“流”,是一个在 Unix 里面经常使用的对象。
 
    我们可以把流当作一个通道,程序的的数据可以沿着这个通道 到各种数据存储机构 ( 比如 : 文件,字符串,数组,或者其他形式的流等 ) 。为什么我们会摒弃用了那么久的 IO 操作,而代之为流呢 ? 其中很重要的一个原因就是并不是所有的数据都存在于文件中。现在的程序,从各种类型的数据存储中获取数据,比如可以是一个文件,内存中的缓冲区,还有 InterneT 。而流技术使得应用程序能够基于一个编程模型,获取各种数据,而不必要学会怎么样去获取远程 web 服务器上的一个文件的具体技术。我们只需要在应用程序和 web 服务器之间创建一个流,然后读取服务器发送的数据就可以了。
 
流对象,封装了读写数据源的各种操作,最大的优点就是一当你学好怎么样操作某一个数据源时,你就可以把这种技术扩展到其他形形色色的数据源。
 
流的种类
流是一个抽象类,你不能在程序中申明 Stream 的一个实例。在 .NET 里面,由 Stream 派生出 5 种具体的流,分别是
 
FileStream       支持对文件的顺序和随机读写操作
MemoryStream   支持对内存缓冲区的顺序和随机读写操作
NETworkStream  支持对 Internet 网络资源的顺序和随机读写操作,存在于 System.Net.Sockets 名称空间
CryptoStream    支持数据的编码和解码,存在于 System.Security.Cryptography 名称空间
BufferedStream  支持缓冲式的读写对那些本身不支持的对象
 
 
并不是所有的 Stream 都采用用完全一摸一样的方法,比如读取本地文件的流,可以告诉我们文件的长度,当前读写的位置等,你可以用 Seek 方法跳到文件的任意位置。相反,读取远程文件的流不支持这些特性。不过, Stream 本身有 CanSeek CanRead CanWrite 属性,用于区别数据源,告诉我们支持还是不支持某中特性。
 
下面我们简单介绍一个 FileStream
 
FileStream
 
进行本地文件操作的时候,我们可以采用 FileSteam 类, 可以很简单的读写为字节数组 (arrays of bytes) 。对于简单数据类型的数据的读写,可以采用 BinaryReader BinaryWriter 以及 StreamReader StreamWriter 类。 BinaryReader ,用特定的编码将基元数据类型读作二进制值。 BinaryWriter 以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。 StreamReader/Writer 则是把数据存储为 XML 格式。在 VB.NET 里面采用那个区别不大,因为所用的类都应用于两种格式。
VB.NET 支持传统的随机读写文件,你可以创建文件,用于存储 Struct ,然后根据记录数访问。就像在以前的 Vb 版本中一样,用 FileOpen FileGet 函数。很大程度上,这已经被 XML 或者数据库取代。如果你创建新的应用程序,而有不需要考虑跟就版本的兼容问题,建议采用 .NET 的新特性。
不管你将要使用拿一个 StreamClass ,你都必须创建一个 FileStream 对象。有很多方式创建,最简单就是指定文件路径,打开模式,如下面的语法。
 Dim fStream As New FileStream(path fileMode fileAccess)
Path 要包含文件的路径以及文件名。 fileMode 是枚举类型 FileMode 的成员之一,如下表所示。 fileAccess 是枚举类型 FileAccess 的成员。 Read ( 只读 ) ReadWrite ( 读写 ) and Write ( 写操作 ) 。决定了文件的读写权限。
 
成员名称
说明
Append
打开现有文件并查找到文件尾,或创建新文件。
Create
指定操作系统应创建新文件。如果文件已存在,它将被改写。
CreateNew
指定操作系统应创建新文件。
Open
指定操作系统应打开现有文件。
OpenOrCreate
指定操作系统应打开文件(如果文件存在);否则,应创建新文件。
Truncate
指定操作系统应打开现有文件。文件一旦打开,就将被截断为为零字节大小。
 
当然,你也可以用 (Open, OpenRead, OpenText, OpenWrite) 创建 FileStream
 
Dim FS As New FileStream = IO.File.OpenWrite("c:/Stream . txt")
 
另外一种方式打开文件可以用 OpenFileDialog SaveFileDialog 控件的 OpenFile 方法。
不需要指定任何参数。 OpenFileDialog OpenFile 方法以只读方式打开文件 ; SaveFileDialog OpenFile 方法以读写方式打开文件。
 
FileStream 只支持最基本的操作,把数据写入字节数组或者从字节数组写入文件中。如果我们用 FileStream 把数据保存在文件中,首先把数据转化为 Byte 数组,然后调用 FileStream Write 方法。同样, FileStream Read 方法,返回的也是字节数组。你或许不会经常直接使用 FileStream 对象,我们还是有必要简单看一下它的基本功能
创建 FileStream 对象之后,调用 WriteByte 写一个字节到文件中。 Write 方法可以将一个数组写入文件中,需要三个参数
   Write(buffer offset count)
Buffer 是要写入数组地址, offset 是偏移量, count 指写入字节数量, Read 的语法也一样。
 
由于 FileStream 要跟 Bytes Array 打交道,所以研究一下 ASCIIEncoding GetBytes UnicodeEncoding GetChars 很有必要
 
下面的例子是一个转换操作。
   Dim buffer() As Byte
   Dim encoder As New System.Text.ASCIIEncoding()
   Dim str As String = "This is a line of text"
   ReDim buffer(str.Length - 1)
   Encoder.GetBytes(str 0 str.Length buffer 0)
   FS.Write(buffer 0 buffer.Length)
 
注意 : 必须 Resize 要写入的 Byte 数组为要读写的长度。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值