我们知道在计算机内部处理的数据信息以及存放在在磁盘上的文件,对于计算机而言就是一堆二进制数(字节)。这些字节(甚至是位,但计算机通常按字节对它们进行分组)。只有在程序解析了这些字节时,它们才具有了对用户更有价值的高级含义。
使用高级程序设计语言处理数据的过程,有时候把数据看作字节能使用更多的方法处理该数据。
Visual Studio使用流的概念,把在计算机内部(或者网络中)传输的数据看作像河里流淌的水流,这些数据就是流动的数据流。
一种类似字节的数据类型是stream----―系列有序字节。文件、流向网络的数据、遍历队列的消息甚至在内存中的数组,所有这些都适用于上述描述。
定义流的抽象概念使得应用程序能统一处理这些不同类型的对象。如果一个加密或序列化例程操作一个普通字节流,那么程序无需知道该流是否表示文件、内存块或流向网络的数据。
Visual Studio 提供操作不同类型流的几个类,还提供处理更抽象级数据类的较高级别类。例如,它提供处理表示文件和目录的流。
本文介绍一些用于操作流的类。只要想通过介绍一些较低级别的类(很少使用)和一些较高级别的类(比较容易读写字符串和文件),使得读者快速了解并掌握读写字符串和文件。
下面简要描述了最有用的流类。
1.FileStream
类:读写文件中的字节。
2.MemoryStream类:读写内存中的字节。
3.BinaryReader、BinaryWriter类:读写流中的特定数据类型。
4.StringReader、StringWriter类:读写字符串中带有或没带新行的文本。
5.StreamReader、StreamWriter类:读写流中带有或没带新行的文本(通常是文件流)。
第1节 Stream
Stream类定义了派生流类必须具有的属性和方法。程序便用这些属性和方法能够执行相对普通的流任务,例如,确定该流是否允许写入。
Stream类最有用的属性
1.CanRead属性:如果流支持读取,则返回True。
2.CanSeek属性:如果流支持查找流中的特定位置,则返回True。
3.CanTimeout属性:如果流支持读写操竹超时,则返回True。
4.CanWrite属性:如果流支持写入,则返回True。
5.Length属性:返回流中的字节数。
6.Position属性:返回流在其字节中的当前位树。因为流支持查找,所以程序可以设置该值来移到特定位置。
7.ReadTimeout属性:确定读操作在超时前等待的毫秒数。
8.Writetimeout属性:确定写操作在超时前等待的毫秒数。
Stream类最有用的方法
1.BeginRead方法:开始异步读取。
2.Beginwrite方法:开始异步写入。
3.Close方法:关闭流,并释放流使用的任何资源(例如,文件句柄)。
4.EndRead方法:等待异步读取完成。
5.EndWrite方法:结束异步写入。
6.Flush方法:从流的缓冲区中将数据流入基础存储媒体(例如,设备、文件、内存等)。
7.Read方法:读取流中的字节,并将当前流的位置向前推进读取的字节数。
8.ReadByte方法:读取流中的1个字节,并将当前流的位置向前推进1个I字节。
9.Seek方法:如果流支持查找,则设置该流的位置。
10.SetLength方法:设置流的长度。如果流的当前长度超过新的长度,则删除超长部分。如果流的当前长度短于新的长度,则增加不足部分。流必须支持当前使用的方法的写入和查找功能。
11.Write方法:将字节写入流,并将当前位置向前推进写入的字节数。
12.WriteByte方法:将1个字节写入流.并将当前位置向前推进1个字节。
第2节 FileStream
FileStream类提供文件流表示。由于FileStream类的父类Stream类定义了很多属性和方法。有关这些属性和方法的描述,请参阅本文第1节的内容。
FileStream在Stream类的基础上添加了两个有用的新属性。第一个是IsAsync属性(如果己经异步打开FileStream,则该属性返回True)。第二个是Name属性(该属性返回传递给对象的构造函数的文件名)。
该类还添加了两个有用的新方法:Lock方法和Unlock方法。Lock方法锁定文件,以使其他程序能读取却不能修改该文件。Unlock方法则解锁锁定的文件。
使用FileStream的构造函数的多个重载版本能够指定文件名或句柄、文件模式(Append、Create、CreateNew、Open、OPenOrCreate或Truncate)、访问模式(Read、Write或ReadWrite)、文件共享(Inheritable,允许子进程继承文件句柄:None、Read、Write或Readwrute)、缓冲区大小和文件选项(Asynchronous、DeleteOnClose、Encrypted、None、RandomAccess、SequentialScane或WriteThrough)等参数。
下面的代码显示了一个使用FileStream的小示例。该示例创建一个文件,并使用通用转换格式(Universal
Transformation
Format,UTF)UTF8Encoding对像将字符串转换成一个字节数组。程序先将字节写入该文件,然后关闭FileStream。
完整的代码如下:
Imports System.IO
Imports System.Text
Public Class Form1
Private Sub
Button1_Click(ByVal sender
As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim file_name As String =
Application.StartupPath &am