C#流(stream)
流用于对IO处理
在System.IO名称空间中有以下类
BinaryReader/Writer
TextReader/Writer
Stream
其中类Stream为抽象类。由此有三个派生类:
MemoryStream:对内存进行读取与写入
BufferedStream:对缓冲器进行读取/写入
FileStream:对文件执行读取与写入
TextReader/Writer为抽象类。由此派生类:
StreamReader/StreamWirter
StringReader/StreamWriter
需要引入命名空间:
using System.IO
案例一:
内存流与缓冲的使用举例:
MemoryStream memStream=new MemoryStream();
BufferedStream bufStream=new BufferedStream(memStream);
byte[] b=new byte[10];
for(int i=0;i<10;i++)
{
bufStream.WriteByte((byte)i);
}
bufStream.Position=0;
bufStream.Read(b,0,9);
for(int i=0;i<10;i++)
{
Console.WriteLine("读的值是:{0}",b[i]);
}
Console.WriteLine("值是:{0}",bufStream.ReadByte());
Console.ReadLine();
案例二:
文件流的使用
string s=Console.ReadLine();
FileStream fileStream=new FileStream(s,FileMode.OpenOrCreate);
BinaryWriter binStream=new BinaryWriter (fileStream);
for(int i=1;i<=10;i++)
{
binStream.Write((int)i);
}
binStream.Close();
fileStream.Close();
FileStream f=new FileStream(s,FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
BinaryReader buf=new BinaryReader(f);
for(int i=1;i<10;i++)
{
Console.WriteLine("输出{0}",buf.ReadByte ()); //在vs2012中这样不能读出东西来
Console.WriteLine("输出{0}",Buf.ReadInt32());才行,因为int是32位的
}
案例三
文本流的使用
string fileName,s;
fileName=Console.ReadLine();
StreamWriter fn=new StreamWriter(fileName,true);
for(int i=1;i<10;i++)
{
s=Console.ReadLine();
fn.WriteLine(s);
}
fn.Close();
StreamReader fr=new StreamReader(fileName);
for(int i=1;i<10;i++)
{
s=fr.ReadLine();
Console.WriteLine(s);
}
fr.Close();
Console.ReadLine();
案例四:
字符串流的使用
using System.Text;
StringBuilder str=new StringBuilder(100,1000);
StringWriter sw=new StringWriter(str);
for(int i=1;i<5;i++)
{
sw.Write(Console.ReadLine());
}
sw.Close();
Console.WriteLine(sw.ToString());
StringReader sr=new StringReader(sw.ToString());
Console.WriteLine(sr.ReadLine());
Console.ReadLine();
BinaryReader 类BinayReder
C#的FileStream类提供了最原始的字节级上的文件读写功能,但我们习惯于对字符串操作,于是StreamWriter和 StreamReader类增强了FileStream,它让我们在字符串级别上操作文件,但有的时候我们还是需要在字节级上操作文件,却又不是一个字节 一个字节的操作,通常是2个、4个或8个字节这样操作,这便有了BinaryWriter和BinaryReader类,它们可以将一个字符或数字按指定 个数字节写入,也可以一次读取指定个数字节转为字符或数字。
下面看一个实例:
BinaryWriter 和 BinaryReader 类用于读取和写入数据,而不是字符串。下面的代码示例演示如何向新的空文件流 (Test.data) 写入数据及从中读取数据。在当前目录中创建了数据文件之后,也就同时创建了相关的 BinaryWriter 和 BinaryReader,BinaryWriter 用于向 Test.data 写入整数 0 到 10,Test.data 将文件指针置于文件尾。在将文件指针设置回初始位置后,BinaryReader 读出指定的内容。
using System; using System.IO; class MyStream { private const string FILE_NAME = "Test.data"; public static void Main(String[] args) { // Create the new, empty data file. if (File.Exists(FILE_NAME)) { Console.WriteLine("{0} already exists!", FILE_NAME); return; } FileStream fs = new FileStream(FILE_NAME, FileMode.CreateNew); // Create the writer for data. BinaryWriter w = new BinaryWriter(fs); // Write data to Test.data. for (int i = 0; i < 11; i++) { w.Write( (int) i); } w.Close(); fs.Close(); // Create the reader for data. fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read); BinaryReader r = new BinaryReader(fs); // Read data from Test.data. for (int i = 0; i < 11; i++) { Console.WriteLine(r.ReadInt32()); } r.Close(); fs.Close(); } }