Programování

Jak používat třídu Buffer v C #

Vyrovnávací paměť je posloupnost bajtů v paměti a vyrovnávací paměť je manipulace s daty uloženými v paměti. V .NET buffering odkazuje na manipulaci s nespravovanou pamětí, která je reprezentována jako pole bajtů.

Možná budete chtít využít výhodu třídy System.Buffer v .NET, kdykoli budete potřebovat přímo zapisovat data do paměti nebo kdykoli budete chtít manipulovat s daty uloženými v nespravované paměti. Tento článek hovoří o tom, jak můžeme pracovat s třídou Buffer v C #.

Chcete-li pracovat s příklady kódu uvedenými v tomto článku, měli byste mít ve svém systému nainstalovanou Visual Studio 2019. Pokud ještě nemáte kopii, můžete si stáhnout Visual Studio 2019 zde.

Vytvořte projekt aplikace konzoly .NET Core v sadě Visual Studio

Nejprve si vytvořme projekt konzolové aplikace .NET Core v sadě Visual Studio. Za předpokladu, že je ve vašem systému nainstalovaná sada Visual Studio 2019, postupujte podle níže uvedených kroků a vytvořte nový projekt konzolové aplikace .NET Core v sadě Visual Studio.

  1. Spusťte Visual Studio IDE.
  2. Klikněte na „Vytvořit nový projekt“.
  3. V okně „Vytvořit nový projekt“ vyberte ze zobrazeného seznamu šablon „Console App (.NET Core)“.
  4. Klikněte na Další.
  5. V dalším okně „Konfigurace nového projektu“ zadejte název a umístění nového projektu.
  6. Klikněte na Vytvořit.

Tím se vytvoří nový projekt aplikace konzoly .NET Core v sadě Visual Studio 2019. Tento projekt použijeme v následujících částech tohoto článku.

Metody třídy Buffer v .NET

Třída Buffer obsahuje následující metody:

  • BlockCopy (Array, Int32, Array, Int32) se používá ke kopírování zdrojového pole ze zadaného odsazení do cílového pole se zadaným odsazením.
  • ByteLength (Array) vrací celkový počet bajtů v poli, tj. Délku pole.
  • GetByte (Array, Int32) se používá k načtení bajtu na určeném místě v poli.
  • SetByte (Array, Int32, Byte) se používá k nastavení bajtu na daném místě v poli.
  • MemoryCopy (Void *, Void *, Int64, Int64) a MemoryCopy (Void *, Void *, UInt64, UInt64) se používají ke kopírování několika bajtů ze zdrojové adresy v paměti na jinou adresu.

Používání polí a vyrovnávacích pamětí v C #

Než začneme pracovat s třídou Buffer a jejími členy, prozkoumejme třídu Array týkající se oboru názvů systému. Třída Array obsahuje metodu s názvem Copy (), kterou lze použít ke kopírování obsahu jednoho pole do druhého.

Třída Buffer v oboru názvů systému obsahuje metodu s názvem BlockCopy (), která dělá totéž. Můžete použít BlockCopy () ke kopírování obsahu zdrojového pole do cílového pole. Je třeba poznamenat, že metoda Buffer.BlockCopy je mnohem rychlejší než metoda Array.Copy. Třída Buffer obsahuje také další metody, například ByteLength, GetByte a SetByte.

Metoda BlockCopy nekopíruje prvky zdrojového pole. BlockCopy spíše kopíruje sekvenci bajtů ze zdrojového pole do cílového pole.

Kopírovat bajty mezi dvěma poli v C #

Buffer.BlockCopy metodu můžete využít ke kopírování bajtů mezi zdrojovým a cílovým polem - jak je ukázáno v níže uvedeném fragmentu kódu.

static void Main ()

{

short [] arr1 = new short [] {1, 2, 3, 4, 5};

short [] arr2 = new short [10];

int sourceOffset = 0;

int destinationOffset = 0;

počet int = 2 * sizeof (short);

Buffer.BlockCopy (arr1, sourceOffset, arr2, destinationOffset, count);

pro (int i = 0; i <arr2.Length; i ++)

  {

Console.WriteLine (arr2 [i]);

  }

Console.ReadKey ();

}

Když spustíte výše uvedený program, bude výstup vypadat v okně konzoly takto.

Najděte délku bajtu pole v C #

Chcete-li zjistit délku pole, můžete využít metodu ByteLength třídy Buffer, jak je ukázáno v níže uvedeném příkladu kódu.

static void Main ()

{

short [] arr1 = new short [] {1, 2, 3, 4, 5};

short [] arr2 = new short [10];

Console.WriteLine ("Délka příjmu1 je: {0}",

Buffer.ByteLength (arr1));

Console.WriteLine ("Délka arr2 je: {0}",

Buffer.ByteLength (arr2));

Console.ReadKey ();

}

Když spustíte výše uvedený program, výstup bude vypadat takto:

Metody SetByte a GetByte třídy Buffer lze použít k nastavení nebo čtení jednotlivých bajtů do az pole. Následující fragment kódu ukazuje, jak lze použít metody SetByte a GetByte.

static void Main ()

{

short [] arr1 = {5, 25};

int délka = Buffer.ByteLength (arr1);

Console.WriteLine ("\ nPůvodní pole je následující: -");

pro (int i = 0; i <délka; i ++)

{

byte b = Buffer.GetByte (arr1, i);

Console.WriteLine (b);

}

Buffer.SetByte (arr1, 0, 100);

Buffer.SetByte (arr1, 1, 100);

Console.WriteLine ("\ nUpravené pole je následující: -");

for (int i = 0; i <Buffer.ByteLength (arr1); i ++)

{

byte b = Buffer.GetByte (arr1, i);

Console.WriteLine (b);

}

Console.ReadKey ();

}

Když provedete výše uvedený program, výstup by vypadal takto.

Třída Buffer poskytuje mnohem lepší výkon při manipulaci s oblastí paměti, která obsahuje primitivní typy. Měli byste využít třídu Buffer, kdykoli potřebujete manipulovat s daty v paměti a kdykoli potřebujete rychlý přístup také k datům uloženým v paměti.

Jak udělat více v C #:

  • Jak používat HashSet v C #
  • Jak používat pojmenované a volitelné parametry v C #
  • Jak srovnávat C # kód pomocí BenchmarkDotNet
  • Jak používat plynulá rozhraní a řetězení metod v C #
  • Jak testovat statické metody v C #
  • Jak refaktorovat Boží objekty v C #
  • Jak používat ValueTask v C #
  • Jak používat neměnnost v C.
  • Jak používat const, readonly a static v C #
  • Jak používat datové anotace v C #
  • Jak pracovat s identifikátory GUID v C # 8
  • Kdy použít abstraktní třídu vs. rozhraní v C #
  • Jak pracovat s AutoMapperem v C #
  • Jak používat výrazy lambda v C #
  • Jak pracovat s delegáty Action, Func a Predicate v C #
  • Jak pracovat s delegáty v C #
  • Jak implementovat jednoduchý záznamník v C #
  • Jak pracovat s atributy v C #
  • Jak pracovat s log4net v C #
  • Jak implementovat vzor návrhu úložiště v C #
  • Jak pracovat s odrazem v C #
  • Jak pracovat se souborovým systémem v C #
  • Jak provést línou inicializaci v C #
  • Jak pracovat s MSMQ v C #
  • Jak pracovat s metodami rozšíření v C #
  • Jak na nás lambda výrazy v C #
  • Kdy použít volatilní klíčové slovo v C #
  • Jak používat klíčové slovo výnos v C #
  • Jak implementovat polymorfismus v C #
  • Jak vytvořit svůj vlastní plánovač úloh v C #
  • Jak pracovat s RabbitMQ v C #
  • Jak pracovat s n-ticí v C #
  • Zkoumání virtuálních a abstraktních metod v C #
  • Jak používat Dapper ORM v C #
  • Jak používat návrhový vzor muší váhy v C #