C# Stream:从基础入门到高级应用

一、基础概念

Stream(流)是 C# 中一个非常重要的概念,它是用来处理输入/输出(I/O)的抽象概念,可以帮助我们更方便地操作文件或网络上的数据。在 C# 中,Stream 类定义在 System.IO 命名空间下,是所有其他流类的基类。

在下面的示例中,我们将展示如何创建文件,并向其中写入数据:

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // 创建新文件
        using (FileStream fs = File.Create("example.txt"))
        {
            // 往文件中写入字符串
            string text = "Hello, C# Stream!";
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(text);
            fs.Write(bytes, 0, bytes.Length);
        }
    }
}

在以上代码中,我们使用 File.Create 方法创建一个名为 “example.txt” 的新文件,并使用 Write 方法将字符串写入文件中。在这个过程中,我们使用了 Stream 的派生类 FileStream,来完成文件的读写操作。

二、常用方法

Stream 类中定义了大量的方法,其中包括了读取、写入、搜索、定位以及转换等功能。下面是一些常用的方法:

1. Read 和 Write 方法

Read 和 Write 方法是 Stream 类中最基本的读写方法。其中,Read 方法的参数表示要读取的字节数,而 Write 方法的参数表示要写入的字节数。

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // 打开已存在的文件
        using (FileStream fs = File.OpenRead("example.txt"))
        {
            byte[] bytes = new byte[fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            string text = System.Text.Encoding.UTF8.GetString(bytes);
            Console.WriteLine(text);
        }
    }
}

在以上代码中,我们使用 File.OpenRead 方法打开已存在的文件,然后使用 Read 方法将文件中的内容读取到字节数组中,并将其转换为字符串输出。

2. Seek 方法

Seek 方法用于将流中的位置设置为指定的字节偏移量,可用于在流中查找和定位特定的数据。

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // 打开已存在的文件
        using (FileStream fs = File.OpenRead("example.txt"))
        {
            // 查找指定字符串
            string searchString = "C#";
            byte[] searchBytes = System.Text.Encoding.UTF8.GetBytes(searchString);
            byte[] buffer = new byte[searchBytes.Length];
            fs.Seek(0, SeekOrigin.Begin);
            while (fs.Read(buffer, 0, buffer.Length) > 0)
            {
                if (buffer.SequenceEqual(searchBytes))
                {
                    Console.WriteLine("Found the string \"{0}\".", searchString);
                    break;
                }
            }
        }
    }
}

在以上代码中,我们使用 File.OpenRead 方法打开已存在的文件,并使用 Seek 方法将文件的当前位置设置为字节偏移量 0。然后,使用 while 循环和 Read 方法,在文件中查找指定的字符串。

三、高级应用

除了基本的读写和定位功能外,Stream 类还可以进行更高级的操作。例如,可以使用流处理器(Stream Processor)来处理流中的数据;或者在基于网络的应用程序中使用网络流(NetworkStream)来进行通信。

1. 使用流处理器

在 C# 中,可以使用流处理器(Stream Processor)来操作流中的数据。流处理器是一种特殊的流,它可以修改流中的数据或将数据转换为其他格式。

using System;
using System.IO;
using System.IO.Compression;

class Program
{
    static void Main(string[] args)
    {
        // 将字符串压缩为 GZip
        string text = "Hello, C# Stream!";
        byte[] bytes = System.Text.Encoding.UTF8.GetBytes(text);
        using (MemoryStream ms = new MemoryStream())
        {
            using (GZipStream gzip = new GZipStream(ms, CompressionMode.Compress))
            {
                gzip.Write(bytes, 0, bytes.Length);
            }
            Console.WriteLine("压缩后的字符串长度为 {0}。", ms.Length);
        }
    }
}

在以上代码中,我们使用 GZipStream 流处理器将字符串压缩为 GZip 格式。在创建 GZipStream 实例时,需指定压缩模式为 CompressionMode.Compress。然后,将压缩后的数据写入 MemoryStream 中,并输出其长度。

2. 使用网络流

在基于网络的应用程序中,可以使用 NetworkStream 类来进行数据通信。NetworkStream 类是 Stream 类的派生类,它可以在网络上读取和写入数据。

using System;
using System.Net.Sockets;

class Program
{
    static void Main(string[] args)
    {
        // 连接到网络服务端
        TcpClient client = new TcpClient("localhost", 8080);
        using (NetworkStream stream = client.GetStream())
        {
            // 发送数据
            string text = "Hello, C# NetworkStream!";
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(text);
            stream.Write(bytes, 0, bytes.Length);

            // 接收数据
            byte[] buffer = new byte[1024];
            int length = stream.Read(buffer, 0, buffer.Length);
            string response = System.Text.Encoding.UTF8.GetString(buffer, 0, length);
            Console.WriteLine(response);
        }
        client.Close();
    }
}

在以上代码中,我们使用 TcpClient 类连接到本地的服务端,并使用 GetStream 方法获取 NetworkStream 实例。接下来,在网络流中写入数据,并读取从服务端返回的响应数据。

原创文章,作者:YPLID,如若转载,请注明出处:https://www.506064.com/n/317550.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
YPLIDYPLID
上一篇 2025-01-11 16:27
下一篇 2025-01-11 16:27

相关推荐

  • Python wordcloud入门指南

    如何在Python中使用wordcloud库生成文字云? 一、安装和导入wordcloud库 在使用wordcloud前,需要保证库已经安装并导入: !pip install wo…

    编程 2025-04-29
  • Python基础代码用法介绍

    本文将从多个方面对Python基础代码进行解析和详细阐述,力求让读者深刻理解Python基础代码。通过本文的学习,相信大家对Python的学习和应用会更加轻松和高效。 一、变量和数…

    编程 2025-04-29
  • Python小波分解入门指南

    本文将介绍Python小波分解的概念、基本原理和实现方法,帮助初学者掌握相关技能。 一、小波变换概述 小波分解是一种广泛应用于数字信号处理和图像处理的方法,可以将信号分解成多个具有…

    编程 2025-04-29
  • 数据结构与算法基础青岛大学PPT解析

    本文将从多个方面对数据结构与算法基础青岛大学PPT进行详细的阐述,包括数据类型、集合类型、排序算法、字符串匹配和动态规划等内容。通过对这些内容的解析,读者可以更好地了解数据结构与算…

    编程 2025-04-29
  • 树莓派DIY无人机一:制作基础

    本文将介绍如何使用树莓派制作一个可飞行的小型无人机。本文将介绍树莓派的选型、比例积木的使用、无线电通信以及如何控制飞行器的基本运动。 一、树莓派的选型 在DIY无人机中,树莓派是必…

    编程 2025-04-29
  • Python竖线图:从入门到精通

    Python竖线图,即Python的绘图工具matplotlib中的一种图形类型,具有直观、易于理解的特点,适用于各种数据分析和可视化场景。本文从初学者角度出发,介绍Python竖…

    编程 2025-04-29
  • Python零基础PDF下载

    本文将为大家介绍如何使用Python下载PDF文件,适合初学者上手实践。 一、安装必要的库 在Python中,我们需要使用urllib和requests库来获取PDF文件的链接,并…

    编程 2025-04-29
  • Polyphone音频编辑器基础入门教程

    Polyphone是一款免费的音频编辑器,可用于编辑.sf2和.sfz格式的音色库。本文将详细介绍Polyphone的基础操作及使用方法。 一、安装和简介 首先,我们需要下载并安装…

    编程 2025-04-29
  • Python爬取数据指南-从入门到精通

    Python爬虫是指用Python编写程序,自动化地获取网络上的信息,并进行处理、分析和存储。以下是Python爬取数据的指南,从入门到精通。 一、获取网页数据 Python爬虫的…

    编程 2025-04-29
  • Python语言设计基础第2版PDF

    Python语言设计基础第2版PDF是一本介绍Python编程语言的经典教材。本篇文章将从多个方面对该教材进行详细的阐述和介绍。 一、基础知识 本教材中介绍了Python编程语言的…

    编程 2025-04-28

发表回复

登录后才能评论