在C#中的一组流

什么是流?

在计算机科学中,流(stream)是一组有序的连续数据,它们通常作为输入或输出的方式。在C#中,流是一种对某些数据源(如文件)进行操作的基本方式。接下来,我们将介绍C#中常用的一组流。

1. 文件流(File stream)

文件流是一种在文件系统上进行的流,可以访问文件的内容并将其读取到程序中,也可以将程序中的内容写入文件中。

文件流的读取

文件流的读取可以使用StreamReader类或BinaryReader类。

StreamReader类用于从文件中读取文本数据。以下是一个从文件中读取文本内容的示例:

string filePath = "C:\\example.txt";

using (StreamReader sr = new StreamReader(filePath))

{

string line;

while ((line = sr.ReadLine()) != null)

{

Console.WriteLine(line);

}

}

以上代码中的重要部分:

using语句可以自动关闭StreamReader对象。

sr.ReadLine()方法可用于从文件中读取一行。

BinaryReader类用于从文件中读取二进制数据。以下是一个从文件中读取二进制文件的示例:

string filePath = "C:\\example";

using (BinaryReader br = new BinaryReader(File.Open(filePath, FileMode.Open)))

{

int length = (int)br.BaseStream.Length;

byte[] buffer = br.ReadBytes(length);

}

以上代码中的重要部分:

File.Open()方法可用于打开文件。

br.BaseStream.Length属性可用于获取文件长度。

br.ReadBytes()方法可用于从文件中读取字节。

文件流的写入

文件流的写入可以使用StreamWriter类或BinaryWriter类。

StreamWriter类用于将文本数据写入到文件中。以下是一个将文本内容写入文件的示例:

string filePath = "C:\\example.txt";

using (StreamWriter sw = new StreamWriter(filePath))

{

sw.WriteLine("Hello, world!");

}

以上代码中的重要部分:

using语句可以自动关闭StreamWriter对象。

sw.WriteLine()方法可用于将一行文本数据写入文件中。

BinaryWriter类用于将二进制数据写入到文件中。以下是一个将二进制数据写入文件的示例:

string filePath = "C:\\example";

byte[] buffer = new byte[] { 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x2C, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x21 };

using (BinaryWriter bw = new BinaryWriter(File.Open(filePath, FileMode.Create)))

{

bw.Write(buffer);

}

以上代码中的重要部分:

FileMode.Create枚举值可用于创建文件。

bw.Write()方法可用于将字节数组写入文件中。

2. 内存流(Memory stream)

内存流是一种在内存中进行的流,可以从中读取数据,也可以将数据写入其中。与文件流不同的是,内存流不会在磁盘上创建文件。

内存流的读取

内存流的读取可以使用StreamReader类或BinaryReader类。

以下是一个从内存流中读取文本数据的示例:

byte[] buffer = Encoding.UTF8.GetBytes("Hello, world!");

using (MemoryStream ms = new MemoryStream(buffer))

using (StreamReader sr = new StreamReader(ms))

{

string line = sr.ReadLine();

}

以上代码中的重要部分:

MemoryStream类用于创建一个内存流。

StreamReader类用于从内存流中读取文本数据。

以下是一个从内存流中读取二进制数据的示例:

byte[] buffer = new byte[] { 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x2C, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x21 };

using (MemoryStream ms = new MemoryStream(buffer))

using (BinaryReader br = new BinaryReader(ms))

{

byte[] data = br.ReadBytes(buffer.Length);

}

以上代码中的重要部分:

BinaryReader类用于从内存流中读取二进制数据。

内存流的写入

内存流的写入可以使用StreamWriter类或BinaryWriter类。

以下是一个将文本数据写入内存流的示例:

using (MemoryStream ms = new MemoryStream())

using (StreamWriter sw = new StreamWriter(ms))

{

sw.WriteLine("Hello, world!");

sw.Flush();

byte[] buffer = ms.ToArray();

}

以上代码中的重要部分:

StreamWriter类用于将文本数据写入内存流中。

sw.Flush()方法用于清空缓冲区。

ms.ToArray()方法可用于将内存流中的内容转换为字节数组。

以下是一个将二进制数据写入内存流的示例:

using (MemoryStream ms = new MemoryStream())

using (BinaryWriter bw = new BinaryWriter(ms))

{

byte[] buffer = new byte[] { 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x2C, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x21 };

bw.Write(buffer);

bw.Flush();

byte[] data = ms.ToArray();

}

以上代码中的重要部分:

BinaryWriter类用于将二进制数据写入内存流中。

bw.Flush()方法用于清空缓冲区。

ms.ToArray()方法可用于将内存流中的内容转换为字节数组。

3. 网络流(Network stream)

网络流是一种通过网络连接进行操作的流,可以在网络上发送和接收数据。

网络流的读取

网络流的读取可以使用StreamReader类或BinaryReader类。

以下是一个从网络流中读取文本数据的示例:

using (TcpClient client = new TcpClient("localhost", 12345))

using (StreamReader sr = new StreamReader(client.GetStream()))

{

string line = sr.ReadLine();

}

以上代码中的重要部分:

TcpClient类用于创建一个TCP连接。

client.GetStream()方法可用于获取网络流。

StreamReader类用于从网络流中读取文本数据。

以下是一个从网络流中读取二进制数据的示例:

using (TcpClient client = new TcpClient("localhost", 12345))

using (BinaryReader br = new BinaryReader(client.GetStream()))

{

int length = (int)br.BaseStream.Length;

byte[] buffer = br.ReadBytes(length);

}

以上代码中的重要部分:

BinaryReader类用于从网络流中读取二进制数据。

网络流的写入

网络流的写入可以使用StreamWriter类或BinaryWriter类。

以下是一个将文本数据写入网络流的示例:

using (TcpClient client = new TcpClient("localhost", 12345))

using (StreamWriter sw = new StreamWriter(client.GetStream()))

{

sw.WriteLine("Hello, world!");

}

以上代码中的重要部分:

StreamWriter类用于将文本数据写入网络流中。

以下是一个将二进制数据写入网络流的示例:

using (TcpClient client = new TcpClient("localhost", 12345))

using (BinaryWriter bw = new BinaryWriter(client.GetStream()))

{

byte[] buffer = new byte[] { 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x2C, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x21 };

bw.Write(buffer);

}

以上代码中的重要部分:

BinaryWriter类用于将二进制数据写入网络流中。

总结

C#中常用的一组流包括文件流、内存流和网络流。文件流用于访问文件系统上的文件,内存流用于将数据存储在内存中进行操作,网络流用于通过网络进行数据的传输。在不同的流类型中,读取和写入数据的操作也有所不同,需要使用不同的类和方法来进行操作。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签