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/zh-tw/n/317550.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YPLID的頭像YPLID
上一篇 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

發表回復

登錄後才能評論