C#使用流

示例

流是提供低级手段来传输数据的对象。它们本身不充当数据容器。

我们处理的数据是字节数组(byte [])的形式。读写功能全部以字节为单位,例如WriteByte()。

没有用于处理整数,字符串等的函数。这使流非常通用,但是,如果您仅想传输文本,则处理起来就不那么容易了。当您处理大量数据时,流特别有用。

我们将需要使用不同类型的Stream(需要从中进行写入/读取)(即后备存储)。例如,如果源是文件,则需要使用FileStream:

string filePath = @"c:\Users\exampleuser\Documents\userinputlog.txt";
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    // 在这里做东西...

    fs.Close();
}

同样,MemoryStream如果后备存储区是内存,则使用:

// 从磁盘上的文件读取所有字节。
byte[] file = File.ReadAllBytes(“C:\\file.txt”);

// 从这些字节创建一个内存流。
using (MemoryStream memory = new MemoryStream(file))
{
   // 在这里做东西...
}

同样,System.Net.Sockets.NetworkStream用于网络访问。

所有Streams都从泛型类派生System.IO.Stream。无法直接从流中读取或写入数据。.NET Framework提供的辅助类,如StreamReader,StreamWriter,BinaryReader和BinaryWriter原生类型和低级别流接口之间的转换,并将数据传输到或从流为您服务。

可以通过StreamReader和读取和写入流StreamWriter。关闭这些文件时应格外小心。默认情况下,关闭也会关闭包含的流,并使它无法进一步使用。可以通过使用具有bool leaveOpen参数并将其值设置为的构造函数来更改此默认行为true。

StreamWriter:

FileStream fs = new FileStream("sample.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
string NextLine = "这是附加行。";
sw.Write(NextLine);
sw.Close();
//fs.Close(); 无需关闭fs。关闭sw还将关闭其包含的流。

StreamReader:

using (var ms = new MemoryStream())
{
    StreamWriter sw = new StreamWriter(ms);
    sw.Write(123);
    //sw.Close(); 这将关闭ms,并且当我们稍后尝试使用ms时,将导致异常
    sw.Flush();     //您可以将剩余数据发送到流。关闭将自动执行此操作
    // 我们需要将位置设置为0才能读取 
    // 从最开始。
   ms.Position= 0;
    StreamReader sr = new StreamReader(ms);
    var myStr = sr.ReadToEnd();
    sr.Close();
    ms.Close();
}

由于类Stream,StreamReader,StreamWriter等实现了IDisposable接口,我们可以调用Dispose()这些类的对象的方法。