日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

如何在 C# 中使用 Buffer

發布時間:2023/12/4 C# 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在 C# 中使用 Buffer 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

緩沖區 是內存中的一組字節序列,緩沖 是用來處理落在內存中的數據,.NET 緩沖 指的是處理 非托管內存 中的數據,用 byte[] 來表示。

當你想把數據寫入到內存或者你想處理非托管內存中的數據,可以使用 .NET 提供的 System.Buffer類,這篇文章就來討論如何使用 Buffer。

Buffer 下的方法列表

Buffer 類包含了下面幾個方法:

  • BlockCopy(Array, Int32, Array, Int32)

用于將指定位置開始的 原數組 copy 到 指定位置開始的 目標數組。

  • ByteLength(Array)

表示數組中 byte 字節的總數。

  • GetByte(Array, Int32)

在數組一個指定位置中提取出一個 byte。

  • SetByte(Array, Int32, Byte)

在數組的一個指定位置中設置一個 byte。

  • MemoryCopy(Void*, Void*, Int64, Int64)

從第一個源地址上copy 若干個byte 到 目標地址中。

理解 Array 和 Buffer

在了解 Buffer 之前,我們先看看 Array 類,Array 類中有一個 Copy() 方法用于將數組的內容 copy 到另一個數組中,在 Buffer 中也提供了一個類似的 BlockCopy() 方法和 Array.Copy() 做的一樣的事情,不過 Buffer.BlockCopy() 要比 Array.Copy() 的性能高得多,原因在于前者是按照 byte 拷貝,后者是 content 拷貝。

數組之間的 bytes copy

你可以利用 Buffer.BlockCopy() 方法 將源數組的字節 copy 到目標數組,如下代碼所示:

static?void?Main() {short?[]?arr1?=?new?short[]?{?1,?2,?3,?4,?5};short?[]?arr2?=?new?short[10];int?sourceOffset?=?0;int?destinationOffset?=?0;int?count?=?2?*?sizeof(short);Buffer.BlockCopy(arr1,?sourceOffset,?arr2,?destinationOffset,?count);for?(int?i?=?0;?i?<?arr2.Length;?i++){Console.WriteLine(arr2[i]);}Console.ReadKey(); }

如果沒看懂上面輸出,我稍微解釋下吧,請看這句:int count = 2 * sizeof(short) 表示從 arr1 中 copy ?4個字節到 arr2 中,而 4 byte = 2 short,也就是將 arr1 中的 {1,2} copy 到 arr2 中,對吧。

理解數組中字節總長度

要想獲取數組中的字節總長度,可以利用 Buffer 中的 ByteLength 方法,如下代碼所示:

static?void?Main() {short?[]?arr1?=?new?short[]?{?1,?2,?3,?4,?5};short?[]?arr2?=?new?short[10];Console.WriteLine("The?length?of?the?arr1?is:?{0}",Buffer.ByteLength(arr1));Console.WriteLine("The?length?of?the?arr2?is:?{0}",Buffer.ByteLength(arr2));Console.ReadKey(); }

從圖中可以看出,一個 short 表示 2 個 byte, 5個 short 就是 10 個 byte,對吧,結果就是 short [].length * 2,所以 Console 中的 10 和 20 就不難理解了,接下來看下 Buffer 的 SetByte 和 GetByte 方法,他們可用于單獨設置和提取數組中某一個位置的 byte,下面的代碼展示了如何使用 SetByte 和 GetByte。

static?void?Main(){short[]?arr1?=?{?5,?25?};int?length?=?Buffer.ByteLength(arr1);Console.WriteLine("\nThe?original?array?is?as?follows:-");for?(int?i?=?0;?i?<?length;?i++){byte?b?=?Buffer.GetByte(arr1,?i);Console.WriteLine(b);}Buffer.SetByte(arr1,?0,?100);Buffer.SetByte(arr1,?1,?100);Console.WriteLine("\nThe?modified?array?is?as?follows:-");for?(int?i?=?0;?i?<?Buffer.ByteLength(arr1);?i++){byte?b?=?Buffer.GetByte(arr1,?i);Console.WriteLine(b);}Console.ReadKey();}

Buffer 在處理 含有基元類型的一個內存塊上 具有超高的處理性能,當你需要處理內存中的數據 或者 希望快速的訪問內存中的數據,這時候 Buffer 將是一個非常好的選擇。

譯文鏈接:https://www.infoworld.com/article/3587751/how-to-use-the-buffer-class-in-c.html

總結

以上是生活随笔為你收集整理的如何在 C# 中使用 Buffer的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。