Udostępnij za pośrednictwem


Decoder Klasa

Definicja

Konwertuje sekwencję zakodowanych bajtów na zestaw znaków.

public ref class Decoder abstract
public abstract class Decoder
[System.Serializable]
public abstract class Decoder
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Decoder
type Decoder = class
[<System.Serializable>]
type Decoder = class
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Decoder = class
Public MustInherit Class Decoder
Dziedziczenie
Decoder
Atrybuty

Przykłady

W poniższym przykładzie pokazano użycie elementu Decoder , aby przekonwertować dwie różne tablice bajtów na tablicę znaków. Jeden z bajtów znaku obejmuje tablice. Jest to podobne do tego, co StreamReader obiekt wykonuje wewnętrznie podczas odczytywania strumienia.

using namespace System;
using namespace System::Text;
int main()
{
   
   // These bytes in UTF-8 correspond to 3 different Unicode
   // characters: space (U+0020), # (U+0023), and the biohazard
   // symbol (U+2623).  Note the biohazard symbol requires 3 bytes
   // in UTF-8 (hexadecimal e2, 98, a3).  Decoders store state across
   // multiple calls to GetChars, handling the case when one char
   // is in multiple byte arrays.
   array<Byte>^bytes1 = {0x20,0x23,0xe2};
   array<Byte>^bytes2 = {0x98,0xa3};
   array<Char>^chars = gcnew array<Char>(3);
   Decoder^ d = Encoding::UTF8->GetDecoder();
   int charLen = d->GetChars( bytes1, 0, bytes1->Length, chars, 0 );
   
   // The value of charLen should be 2 now.
   charLen += d->GetChars( bytes2, 0, bytes2->Length, chars, charLen );
   for ( UInt16 index(0); index < chars->Length; ++index )
   {
      Console::Write( "U+{0:X4}  ", static_cast<UInt16>(chars[ index ]) );

   }
}
using System;
using System.Text;
public class dec
{
    public static void Main()
    {
        // These bytes in UTF-8 correspond to 3 different Unicode
        // characters: space (U+0020), # (U+0023), and the biohazard
        // symbol (U+2623).  Note the biohazard symbol requires 3 bytes
        // in UTF-8 (hexadecimal e2, 98, a3).  Decoders store state across
        // multiple calls to GetChars, handling the case when one char
        // is in multiple byte arrays.
        byte[] bytes1 = { 0x20, 0x23, 0xe2 };
        byte[] bytes2 = { 0x98, 0xa3 };
        char[] chars = new char[3];

        Decoder d = Encoding.UTF8.GetDecoder();
        int charLen = d.GetChars(bytes1, 0, bytes1.Length, chars, 0);
        // The value of charLen should be 2 now.
        charLen += d.GetChars(bytes2, 0, bytes2.Length, chars, charLen);
        foreach(char c in chars)
            Console.Write("U+{0:X4}  ", (ushort)c);
    }
}
Imports System.Text

Public Class dec
    
    Public Shared Sub Main()
        ' These bytes in UTF-8 correspond to 3 different Unicode
        ' characters: space (U+0020), # (U+0023), and the biohazard
        ' symbol (U+2623).  Note the biohazard symbol requires 3 bytes
        ' in UTF-8 (hexadecimal e2, 98, a3).  Decoders store state across
        ' multiple calls to GetChars, handling the case when one char
        ' is in multiple byte arrays.
        Dim bytes1 As Byte() =  {&H20, &H23, &HE2}
        Dim bytes2 As Byte() =  {&H98, &HA3}
        Dim chars(3) As Char
        
        Dim d As Decoder = Encoding.UTF8.GetDecoder()
        Dim charLen As Integer = d.GetChars(bytes1, 0, bytes1.Length, chars, 0)
        ' The value of charLen should be 2 now.
        charLen += d.GetChars(bytes2, 0, bytes2.Length, chars, charLen)
        Dim c As Char
        For Each c In  chars
            Console.Write("U+{0:X4}  ", Convert.ToUInt16(c) )
        Next c
    End Sub
End Class

Uwagi

Aby uzyskać wystąpienie implementacji Decoder klasy, wywołaj GetDecoder metodę implementacji Encoding .

Metoda GetCharCount określa, ile znaków powoduje dekodowanie sekwencji bajtów, a GetChars metoda wykonuje rzeczywiste dekodowanie. W klasie dostępnych Decoder jest kilka wersji obu tych metod. Aby uzyskać więcej informacji, zobacz Encoding.GetChars. Decoder Obiekt zachowuje informacje o stanie między kolejnymi wywołaniami GetChars lub Convert metodami, dzięki czemu może poprawnie dekodować sekwencje bajtów, które obejmują bloki. Obiekt Decoder zachowuje również końcowe bajty na końcu bloków danych i używa bajtów końcowych w następnej operacji dekodowania. W związku z tym i GetEncoder są przydatne w przypadku operacji transmisji sieci i plików, GetDecoder ponieważ te operacje często zajmują się blokami danych zamiast pełnego strumienia danych.

Uwaga

Po zakończeniu działania aplikacji ze strumieniem danych należy upewnić się, że informacje o stanie są opróżniane, ustawiając flush parametr na true wartość w odpowiednim wywołaniu metody. W przypadku wystąpienia wyjątku lub przełączenia strumieni przez aplikację należy wywołać metodę Reset w celu wyczyszczenia stanu wewnętrznego Decoder obiektu.

Uwagi dotyczące implementowania

Gdy aplikacja dziedziczy z tej klasy, musi zastąpić wszystkie elementy członkowskie.

Konstruktory

Decoder()

Inicjuje nowe wystąpienie klasy Decoder.

Właściwości

Fallback

Pobiera lub ustawia DecoderFallback obiekt dla bieżącego Decoder obiektu.

FallbackBuffer

DecoderFallbackBuffer Pobiera obiekt skojarzony z bieżącym Decoder obiektem.

Metody

Convert(Byte*, Int32, Char*, Int32, Boolean, Int32, Int32, Boolean)

Konwertuje bufor zakodowanych bajtów na zakodowane znaki UTF-16 i przechowuje wynik w innym buforze.

Convert(Byte[], Int32, Int32, Char[], Int32, Int32, Boolean, Int32, Int32, Boolean)

Konwertuje tablicę zakodowanych bajtów na zakodowane znaki UTF-16 i przechowuje wynik w tablicy znaków.

Convert(ReadOnlySpan<Byte>, Span<Char>, Boolean, Int32, Int32, Boolean)

Konwertuje zakres zakodowanych bajtów na zakodowane znaki UTF-16 i przechowuje wynik w innym buforze zakresu.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetCharCount(Byte*, Int32, Boolean)

W przypadku zastąpienia w klasie pochodnej oblicza liczbę znaków generowanych przez dekodowanie sekwencji bajtów rozpoczynających się od określonego wskaźnika bajtów. Parametr wskazuje, czy wyczyścić stan wewnętrzny dekodera po obliczeniu.

GetCharCount(Byte[], Int32, Int32)

W przypadku zastąpienia w klasie pochodnej oblicza liczbę znaków generowanych przez dekodowanie sekwencji bajtów z określonej tablicy bajtów.

GetCharCount(Byte[], Int32, Int32, Boolean)

W przypadku zastąpienia w klasie pochodnej oblicza liczbę znaków generowanych przez dekodowanie sekwencji bajtów z określonej tablicy bajtów. Parametr wskazuje, czy wyczyścić stan wewnętrzny dekodera po obliczeniu.

GetCharCount(ReadOnlySpan<Byte>, Boolean)

W przypadku zastąpienia w klasie pochodnej oblicza liczbę znaków generowanych przez dekodowanie sekwencji bajtów w zakresie. Parametr wskazuje, czy wyczyścić stan wewnętrzny dekodera po obliczeniu.

GetChars(Byte*, Int32, Char*, Int32, Boolean)

W przypadku zastąpienia w klasie pochodnej dekoduje sekwencję bajtów rozpoczynającą się od określonego wskaźnika bajtów i wszystkich bajtów w buforze wewnętrznym do zestawu znaków przechowywanych od określonego wskaźnika znaków. Parametr wskazuje, czy wyczyścić stan wewnętrzny dekodera po konwersji.

GetChars(Byte[], Int32, Int32, Char[], Int32)

W przypadku zastąpienia w klasie pochodnej dekoduje sekwencję bajtów z określonej tablicy bajtów i wszelkie bajty w buforze wewnętrznym do określonej tablicy znaków.

GetChars(Byte[], Int32, Int32, Char[], Int32, Boolean)

W przypadku zastąpienia w klasie pochodnej dekoduje sekwencję bajtów z określonej tablicy bajtów i wszelkie bajty w buforze wewnętrznym do określonej tablicy znaków. Parametr wskazuje, czy wyczyścić stan wewnętrzny dekodera po konwersji.

GetChars(ReadOnlySpan<Byte>, Span<Char>, Boolean)

W przypadku zastąpienia w klasie pochodnej dekoduje sekwencję bajtów i wszystkich bajtów w buforze wewnętrznym do zestawu znaków przechowywanych od określonego wskaźnika znaków. Parametr wskazuje, czy wyczyścić stan wewnętrzny dekodera po konwersji.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
Reset()

Po przesłonięciu w klasie pochodnej ustawia dekoder z powrotem do stanu początkowego.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Metody rozszerzania

Convert(Decoder, ReadOnlySequence<Byte>, IBufferWriter<Char>, Boolean, Int64, Boolean)

Konwertuje znaki zakodowane ReadOnlySequence<T> na UTF-16 i zapisuje wynik na writer.

Convert(Decoder, ReadOnlySpan<Byte>, IBufferWriter<Char>, Boolean, Int64, Boolean)

Konwertuje znak ReadOnlySpan<T> na znaki przy użyciu i decoder zapisuje wynik na writer.

Dotyczy

Zobacz też