为了在此处进一步扩展其他答案,并帮助解释很多您会看到的示例代码,大多数情况下,您不直接对流进行读写。流是传输数据的底层方法。
您会注意到,用于读取和写入的函数均以字节为单位,例如WriteByte()。没有用于处理整数,字符串等的函数。这使流非常通用,但如果您仅想传输文本,则处理起来就不那么容易了。
但是,.NET提供了在本机类型和低级流接口之间转换的类,并为您在流之间传输数据。一些值得注意的此类类是:
StreamWriter // Badly named. Should be TextWriter.
StreamReader // Badly named. Should be TextReader.
BinaryWriter
BinaryReader
要使用这些,首先要获取流,然后创建上述类之一并将其与流关联。例如
MemoryStream memoryStream = new MemoryStream();
StreamWriter myStreamWriter = new StreamWriter(memoryStream);
StreamReader和StreamWriter在本机类型及其字符串表示形式之间进行转换,然后将字符串作为字节往返于流中进行传输。所以
myStreamWriter.Write(123);
会将“ 123”(三个字符“ 1”,“ 2”然后是“ 3”)写入流中。如果要处理文本文件(例如html),则可以使用StreamReader和StreamWriter。
鉴于
myBinaryWriter.Write(123);
将写入代表32位整数值123(0x7B,0x00、0x00、0x00)的四个字节。如果要处理二进制文件或网络协议,则可以使用BinaryReader和BinaryWriter。(如果要与网络或其他系统交换数据,则需要注意字节序,但这是另一篇文章。)