Stream抽象类
Stream派生类型吧数据表现为原始的字节流。
成员 | 作用 |
---|---|
CanRead、CanWrite和CanSeek | 检测当前流是否支持读、寻址和写 |
Close() | 关闭当前流并释放与之关联的所有资源 |
Flush() | 使用当前的缓冲状态更新基层的数据源或存储库。如果流不实现缓冲,这个方法什么都不做 |
Length | 返回流的长度,以字节来表示 |
Position | 检测在当前流中的位置 |
Read()和ReadByte() | 从当前流读取字节序列,并将此流中的位置偏移读取的字节数 |
Seek() | 设置当前流中的位置 |
SetLength() | 设置当前流的长度 |
Write()和WriteByte() | 向当前流中写入字节序列,并将此流中的当前位置偏移写入的字节数 |
FileStream
FileStream类是一个相当原始的流(字节流),它只能读取或写入一个字节或者字节数组。
写入文件:
string msg = "Hello";
byte[] msgAsByteArray = Encoding.Default.GetBytes(msg);
fStream.Write(msgAsByteArray,0,msgAsByteArray.Length);
读取文件:
fStream.Position = 0;
byte[] bytesFromFile = new byte[msgAsByteArray.Length];
fStream.Read(bytesFromFile,0,bytesFromFile.Length);
总结:使用FileStream进行读写,要注意流内部的位置,并且用Read方法时,读取字节数可能会超出流的长度,还要需要使用Encoding中的方法将字节转换成String。
StreamWriter和StreamReader
读写基于字符的数据
StreamReader和StringReader一样,它们都从TextReader抽象类型派生。
Streamwriter和StringWriter一样,从TextWriter抽象类型派生。
成员 | 作用 |
---|---|
Close() | 关闭当前编写器并释放任何与该编写器关联的系统资源。在这个过程中,缓冲区将被自动清理 |
Flush() | 清理当前编写器的所有缓冲区,使所有缓冲数据写入基础设置,但是不关闭编写器 |
NewLine | 代表派生的编写器类的行结束符字符串。默认行结束符字符串是回车符后接一个换行符 |
Write() | 这个重载的方法将一行写入文本流,不跟行结束符 |
WriteLine() | 这个重载的方法将一行写入文本流,后跟行结束符 |
成员 | 作用 |
---|---|
Peek() | 返回下一个可用字符,而不更改读取器位置。返回-1表示已经到了流的尾部 |
Read() | 从输入流中读取数据 |
ReadBlock() | 从当前流红读取最大计数字符,并从索引开始将该数据写入缓冲区 |
ReadLine() | 从当前流中读取一行字符,并将数据作为字符串返回 |
ReadToEnd() | 读取从当前位置到流结尾的所有字符,并将它们作为一个字符串返回 |
写入文本:
using(StreamWriter sw = File.CreateText("reminders.txt"){
sw.WriteLine(".....");
}
读取文本:
using(StreamReader sr = File.OpenText("reminders.txt"){
string input = null;
while( (input = sr.ReadLine()) != null)
Console.WriteLine(input);
}
注意:也可以直接创建StreamWriter/StreamReader类型( using(StreamWriter sw = new StreamWriter(“reminders.txt”)) )