C#之stream

 

在C#中经常要用stream

stream下面主要有

FileStream:使用文件作为后备设备。

BufferedStream:使用缓冲区作为后备设备,用来增强性能的中间存储。

MemoryStream:使用内存作为后备存储,执行I/O速度快。

NetworkStream:没有后备设备,用于在网络上传输数据。

CryptoStream:和其他流配合使用,执行加密/解密操作。

Stream类的常用方法:

Seek()方法:设置流的当前位置。

Read()方法和ReadByte()方法,对流执行同步读取操作。

Read()在流尾返回0,

ReadByte()返回-1。

Write()方法和WriteByte()方法,对流执行同步写入操作。

Flush()方法:清除缓存区中的内容,并将其内容强制转移至目标设备。

Close()方法:释放资源,如文件、套接字等。该方法自动执行Flush()方法。

使用流有什么好处了:

比如说memorystream:

:MemoryStream可以进行很多控制的,这个就好比你使用StreamReader来来操作文件,而不是直接操作文件一样。

MemoryStream 类创建这样的流,该流以内存而不是磁盘或网络连接作为支持存储区。MemoryStream 封装以无符号字节数组形式存储的数据,该数组在创建 MemoryStream 对象时被初始化,或者该数组可创建为空数组。可在内存中直接访问这些封装的数据。内存流可降低应用程序中对临时缓冲区和临时文件的需要。

 

 

在读写文件的过程中,Filestream只可以进行以字节为单位原始数据流进行读写操作,为此,C#中提供了功能更加强大的StreamReader/ StreamWriter来支持文件的读写. StreamReader/ StreamWriter可以进行以字符为单位的数据读写操作..

一. 用StreamReader的构造函数

StreamReader有很多的构造函数:在这里只列出两个常用和比较常见的

StreamReader  sr=new StreamReader (Stream); Stream可以是Filestream;

StreamReader  sr=new StreamReader (String); String为指定的文件名初始化 StreamReader 类的新实例。

例如:

//demo1

FileStream filest = new FileStream(@"c:\abc.txt", FileMode.Open, FileAccess.ReadWrite); StreamReader sr = new StreamReader(filest);

//demo2

StreamReader another = new StreamReader(@"c:\abc.txt");

两个StreamReader都指向同一个文件.

StreamReader读取文件中的数据的代码

FileStream filest = new FileStream(@"c:\abc.txt", FileMode.Open, FileAccess.ReadWrite);

StreamReader sr = new StreamReader(filest);

string strLine = sr.ReadLine();//读取文件中的一行

while(strLine!=null)//判断是否为空,表示到文件最后一行了

{

Console.WriteLine(strLine);

strLine = sr.ReadLine();

}

sr.Close();//关闭流

filest.Close();

程序运行结果和盘中abc.txt文件中的内容比较如下:

   

二. StreamWriter

StreamWriter 专门用于的向文件中写数据的,它和StreamReader类似,只是一个负责向文件中写数据,一个负责向文件中读数据而已.

StreamWriter 构造函数也有很多.在这里只举例两个构造函数.

StreamWriter  sr=new StreamWriter (Stream); Stream可以是Filestream;

StreamWriter  sr=new StreamWriter (String); String为指定的文件名初始化StreamWriter 类的新实例。

例如:

//demo1

FileStream filest = new FileStream(@"c:\abc.txt", FileMode.Open, FileAccess.ReadWrite); StreamWriter sw = new StreamWriter (filest);

//demo2

StreamWriter another = new StreamWriter (@"c:\abc.txt");下面的例子可以让大家掌握写文件的方法.

FileStream filewriter = new FileStream(@"C:\abc.txt", FileMode.Append, FileAccess.Write);

以追加的方式打开文件,并进行写入操作.

StreamWriter sw = new StreamWriter(filewriter); 构造函数;

for (char mychar = 'a'; mychar <= 'z'; mychar++)

{

sw.Write(mychar);//将从a—z26个小写字母写入文件中.

}

sw.Close();filewriter.Close();

//demo

FileStream filest = new FileStream(@"c:\abc.txt", FileMode.Open, FileAccess.ReadWrite);

StreamReader sr = new StreamReader(filest);

string strLine = sr.ReadLine();

while(strLine!=null)

{

Console.WriteLine(strLine);

strLine = sr.ReadLine();

}

sr.Close();

filest.Close();
 

filest.Close();
 
   

以上两图是输出内容和abc.txt中内容的比较.

请大家仔细研读本程序.

 

 

 

 

 

C#中,Bitmap与Stream之间的相互转换可以通过以下方法实现: ### 将Bitmap转换为Stream 可以使用`MemoryStream`将`Bitmap`对象转换为流。以下是示例代码: ```csharp using System.Drawing; using System.IO; public static Stream BitmapToStream(Bitmap bitmap) { MemoryStream stream = new MemoryStream(); bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg); stream.Position = 0; return stream; } ``` ### 从Stream加载Bitmap 可以从流中读取数据并创建`Bitmap`对象。以下是示例代码: ```csharp using System.Drawing; using System.IO; public static Bitmap StreamToBitmap(Stream stream) { return new Bitmap(stream); } ``` ### 结合引用内容的完整示例 引用中提供了将字节数组转换为`Bitmap`的方法,结合上述方法,可以完整地实现`Bitmap`、`Stream`和字节数组之间的转换。以下是一个完整的示例: ```csharp using System; using System.Drawing; using System.IO; class Program { public static Bitmap BytesToBitmap(byte[] Bytes) { MemoryStream stream = null; try { stream = new MemoryStream(Bytes); return new Bitmap((Image)new Bitmap(stream)); } catch (ArgumentNullException ex) { throw ex; } catch (ArgumentException ex) { throw ex; } finally { stream.Close(); } } public static Stream BitmapToStream(Bitmap bitmap) { MemoryStream stream = new MemoryStream(); bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg); stream.Position = 0; return stream; } public static Bitmap StreamToBitmap(Stream stream) { return new Bitmap(stream); } public static byte[] StreamToBytes(Stream stream) { byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); return buffer; } static void Main() { // 示例:从文件创建Bitmap Bitmap bitmap = new Bitmap("example.jpg"); // 将Bitmap转换为Stream Stream stream = BitmapToStream(bitmap); // 将Stream转换为字节数组 byte[] bytes = StreamToBytes(stream); // 将字节数组转换为Bitmap Bitmap newBitmap = BytesToBitmap(bytes); // 保存新的Bitmap newBitmap.Save("new_example.jpg"); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值