Ars*_*yan 73
甲流是用于传输数据的对象.有一个通用流类System.IO.Stream,从中派生出.NET中的所有其他流类.在Stream类的字节交易.
具体的流类用于处理除字节之外的其他类型的数据.例如:
FileStream当外部源是一个文件类用于MemoryStream 用于将数据存储在内存中System.Net.Sockets.NetworkStream 处理网络数据读取器/写入器流如同流StreamReader而StreamWriter不是流 - 它们不是源自System.IO.Stream它们,它们旨在帮助写入和读取数据流!
Tim*_*ams 53
在这里扩展一些其他答案,并帮助解释很多你会看到的示例代码,大多数时候你不直接读取和写入流.流是一种传输数据的低级方法.
您会注意到读取和写入的函数都是面向字节的,例如WriteByte().没有用于处理整数,字符串等的函数.这使得流非常通用,但是如果您只是想传输文本,则不太简单.
但是,.NET提供了在本机类型和低级流接口之间进行转换的类,并为您传输数据到流中或从流中传输数据.一些值得注意的类是:
StreamWriter // Badly named. Should be TextWriter.
StreamReader // Badly named. Should be TextReader.
BinaryWriter
BinaryReader
Run Code Online (Sandbox Code Playgroud)
要使用这些,首先获取流,然后创建上述类之一并将其与流关联.例如
MemoryStream memoryStream = new MemoryStream();
StreamWriter myStreamWriter = new StreamWriter(memoryStream);
Run Code Online (Sandbox Code Playgroud)
StreamReader和StreamWriter在本机类型及其字符串表示之间进行转换,然后将字符串作为字节传输到流中或从流中传输.所以
myStreamWriter.Write(123);
Run Code Online (Sandbox Code Playgroud)
将"123"(三个字符'1','2'然后'3')写入流.如果您正在处理文本文件(例如html),StreamReader和StreamWriter就是您要使用的类.
而
myBinaryWriter.Write(123);
Run Code Online (Sandbox Code Playgroud)
将写入表示32位整数值123(0x7B,0x00,0x00,0x00)的四个字节.如果您正在处理二进制文件或网络协议,您可以使用BinaryReader和BinaryWriter.(如果您正在与网络或其他系统交换数据,则需要注意字节序,但这是另一篇文章.)
mea*_*est 21
流可以处理大量数据.如果同时将所有数据加载到内存中是不切实际的,您可以将其作为流打开并使用它的小块.
Stream只是physical字节流上的抽象(或包装器).这个physical流称为base stream.所以总是有在其上流封包被创建并基本流类型之后即由此所述包装被命名为基本流FileStream,MemoryStream等
流包装器的优点是您可以获得统一的api来与任何底层类型的流进行交互usb, file等.
为什么要将数据视为流 - 因为数据块是按需加载的,我们可以将数据作为块检查/处理,而不是将整个数据加载到内存中.这就是大多数程序处理大文件的方式,例如加密OS映像文件.
我首先阅读 MSDN 上的流: http://msdn.microsoft.com/en-us/library/system.io.stream.aspx
Memorystream 和 FileStream 是分别用于处理原始内存和文件的流......
| 归档时间: |
|
| 查看次数: |
102406 次 |
| 最近记录: |