4 月23 学习笔记

本文详细介绍了C#中的IO流概念及其应用,包括BinaryReader/Writer、TextReader/Writer和Stream等类的基本使用方法,并通过四个具体案例展示了内存流、缓冲流、文件流和字符串流的操作过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

BinaryReader和binaryWriter的用法

 C#的FileStream类提供了最原始的字节级上的文件读写功能,但我们习惯于对字符串操作,于是StreamWriter和 StreamReader类增强了FileStream,它让我们在字符串级别上操作文件,但有的时候我们还是需要在字节级上操作文件,却又不是一个字节 一个字节的操作,通常是2个、4个或8个字节这样操作,这便有了BinaryWriter和BinaryReader类,它们可以将一个字符或数字按指定 个数字节写入,也可以一次读取指定个数字节转为字符或数字。

下面看一个实例:

BinaryWriter 和 BinaryReader 类用于读取和写入数据,而不是字符串。下面的代码示例演示如何向新的空文件流 (Test.data) 写入数据及从中读取数据。在当前目录中创建了数据文件之后,也就同时创建了相关的 BinaryWriter 和 BinaryReaderBinaryWriter 用于向 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();
    }
}
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值