Encoder Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Konwertuje zestaw znaków na sekwencję bajtów.
public ref class Encoder abstract
public abstract class Encoder
[System.Serializable]
public abstract class Encoder
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Encoder
type Encoder = class
[<System.Serializable>]
type Encoder = class
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Encoder = class
Public MustInherit Class Encoder
- Dziedziczenie
-
Encoder
- Atrybuty
Przykłady
W poniższym przykładzie pokazano, jak przekonwertować tablicę znaków Unicode na bloki bajtów przy użyciu określonego kodowania. Dla porównania tablica znaków jest najpierw zakodowana przy użyciu metody UTF7Encoding. Następnie tablica znaków jest kodowana przy użyciu elementu Encoder.
using System;
using System.Text;
class EncoderTest {
public static void Main() {
// The characters to encode.
Char[] chars = new Char[] {
'\u0023', // #
'\u0025', // %
'\u03a0', // Pi
'\u03a3' // Sigma
};
// Encode characters using an Encoding object.
Encoding encoding = Encoding.UTF7;
Console.WriteLine("Using Encoding\n--------------");
// Encode complete array for comparison.
Byte[] allCharactersFromEncoding = encoding.GetBytes(chars);
Console.WriteLine("All characters encoded:");
ShowArray(allCharactersFromEncoding);
// Encode characters, one-by-one.
// The Encoding object will NOT maintain state between calls.
Byte[] firstchar = encoding.GetBytes(chars, 0, 1);
Console.WriteLine("First character:");
ShowArray(firstchar);
Byte[] secondchar = encoding.GetBytes(chars, 1, 1);
Console.WriteLine("Second character:");
ShowArray(secondchar);
Byte[] thirdchar = encoding.GetBytes(chars, 2, 1);
Console.WriteLine("Third character:");
ShowArray(thirdchar);
Byte[] fourthchar = encoding.GetBytes(chars, 3, 1);
Console.WriteLine("Fourth character:");
ShowArray(fourthchar);
// Now, encode characters using an Encoder object.
Encoder encoder = encoding.GetEncoder();
Console.WriteLine("Using Encoder\n-------------");
// Encode complete array for comparison.
Byte[] allCharactersFromEncoder = new Byte[encoder.GetByteCount(chars, 0, chars.Length, true)];
encoder.GetBytes(chars, 0, chars.Length, allCharactersFromEncoder, 0, true);
Console.WriteLine("All characters encoded:");
ShowArray(allCharactersFromEncoder);
// Do not flush state; i.e. maintain state between calls.
bool bFlushState = false;
// Encode characters one-by-one.
// By maintaining state, the Encoder will not store extra bytes in the output.
Byte[] firstcharNoFlush = new Byte[encoder.GetByteCount(chars, 0, 1, bFlushState)];
encoder.GetBytes(chars, 0, 1, firstcharNoFlush, 0, bFlushState);
Console.WriteLine("First character:");
ShowArray(firstcharNoFlush);
Byte[] secondcharNoFlush = new Byte[encoder.GetByteCount(chars, 1, 1, bFlushState)];
encoder.GetBytes(chars, 1, 1, secondcharNoFlush, 0, bFlushState);
Console.WriteLine("Second character:");
ShowArray(secondcharNoFlush);
Byte[] thirdcharNoFlush = new Byte[encoder.GetByteCount(chars, 2, 1, bFlushState)];
encoder.GetBytes(chars, 2, 1, thirdcharNoFlush, 0, bFlushState);
Console.WriteLine("Third character:");
ShowArray(thirdcharNoFlush);
// Must flush state on last call to GetBytes().
bFlushState = true;
Byte[] fourthcharNoFlush = new Byte[encoder.GetByteCount(chars, 3, 1, bFlushState)];
encoder.GetBytes(chars, 3, 1, fourthcharNoFlush, 0, bFlushState);
Console.WriteLine("Fourth character:");
ShowArray(fourthcharNoFlush);
}
public static void ShowArray(Array theArray) {
foreach (Object o in theArray) {
Console.Write("[{0}]", o);
}
Console.WriteLine("\n");
}
}
/* This code example produces the following output.
Using Encoding
--------------
All characters encoded:
[43][65][67][77][65][74][81][79][103][65][54][77][45]
First character:
[43][65][67][77][45]
Second character:
[43][65][67][85][45]
Third character:
[43][65][54][65][45]
Fourth character:
[43][65][54][77][45]
Using Encoder
-------------
All characters encoded:
[43][65][67][77][65][74][81][79][103][65][54][77][45]
First character:
[43][65][67]
Second character:
[77][65][74]
Third character:
[81][79][103]
Fourth character:
[65][54][77][45]
*/
Imports System.Text
Imports Microsoft.VisualBasic.Strings
Class EncoderTest
Public Shared Sub Main()
' Unicode characters.
' ChrW(35) = #
' ChrW(37) = %
' ChrW(928) = Pi
' ChrW(931) = Sigma
Dim chars() As Char = {ChrW(35), ChrW(37), ChrW(928), ChrW(931)}
' Encode characters using an Encoding object.
Dim encoding As Encoding = Encoding.UTF7
Console.WriteLine( _
"Using Encoding" & _
ControlChars.NewLine & _
"--------------" _
)
' Encode complete array for comparison.
Dim allCharactersFromEncoding As Byte() = encoding.GetBytes(chars)
Console.WriteLine("All characters encoded:")
ShowArray(allCharactersFromEncoding)
' Encode characters, one-by-one.
' The Encoding object will NOT maintain state between calls.
Dim firstchar As Byte() = encoding.GetBytes(chars, 0, 1)
Console.WriteLine("First character:")
ShowArray(firstchar)
Dim secondchar As Byte() = encoding.GetBytes(chars, 1, 1)
Console.WriteLine("Second character:")
ShowArray(secondchar)
Dim thirdchar As Byte() = encoding.GetBytes(chars, 2, 1)
Console.WriteLine("Third character:")
ShowArray(thirdchar)
Dim fourthchar As Byte() = encoding.GetBytes(chars, 3, 1)
Console.WriteLine("Fourth character:")
ShowArray(fourthchar)
' Now, encode characters using an Encoder object.
Dim encoder As Encoder = encoding.GetEncoder()
Console.WriteLine( _
"Using Encoder" & _
ControlChars.NewLine & _
"-------------" _
)
' Encode complete array for comparison.
Dim allCharactersFromEncoder( _
encoder.GetByteCount(chars, 0, chars.Length, True) _
) As Byte
encoder.GetBytes(chars, 0, chars.Length, allCharactersFromEncoder, 0, True)
Console.WriteLine("All characters encoded:")
ShowArray(allCharactersFromEncoder)
' Do not flush state; i.e. maintain state between calls.
Dim bFlushState As Boolean = False
' Encode characters one-by-one.
' By maintaining state, the Encoder will not store extra bytes in the output.
Dim firstcharNoFlush( _
encoder.GetByteCount(chars, 0, 1, bFlushState) _
) As Byte
encoder.GetBytes(chars, 0, 1, firstcharNoFlush, 0, bFlushState)
Console.WriteLine("First character:")
ShowArray(firstcharNoFlush)
Dim secondcharNoFlush( _
encoder.GetByteCount(chars, 1, 1, bFlushState) _
) As Byte
encoder.GetBytes(chars, 1, 1, secondcharNoFlush, 0, bFlushState)
Console.WriteLine("Second character:")
ShowArray(secondcharNoFlush)
Dim thirdcharNoFlush( _
encoder.GetByteCount(chars, 2, 1, bFlushState) _
) As Byte
encoder.GetBytes(chars, 2, 1, thirdcharNoFlush, 0, bFlushState)
Console.WriteLine("Third character:")
ShowArray(thirdcharNoFlush)
' Must flush state on last call to GetBytes().
bFlushState = True
Dim fourthcharNoFlush( _
encoder.GetByteCount(chars, 3, 1, bFlushState) _
) As Byte
encoder.GetBytes(chars, 3, 1, fourthcharNoFlush, 0, bFlushState)
Console.WriteLine("Fourth character:")
ShowArray(fourthcharNoFlush)
End Sub
Public Shared Sub ShowArray(theArray As Array)
Dim o As Object
For Each o In theArray
Console.Write("[{0}]", o)
Next o
Console.WriteLine(ControlChars.NewLine)
End Sub
End Class
'This code example produces the following output.
'
'Using Encoding
'--------------
'All characters encoded:
'[43][65][67][77][65][74][81][79][103][65][54][77][45]
'
'First character:
'[43][65][67][77][45]
'
'Second character:
'[43][65][67][85][45]
'
'Third character:
'[43][65][54][65][45]
'
'Fourth character:
'[43][65][54][77][45]
'
'Using Encoder
'-------------
'All characters encoded:
'[43][65][67][77][65][74][81][79][103][65][54][77][45][0]
'
'First character:
'[43][65][67][0]
'
'Second character:
'[77][65][74][0]
'
'Third character:
'[81][79][103][0]
'
'Fourth character:
'[65][54][77][45][0]
'
Uwagi
Aby uzyskać wystąpienie implementacji Encoder klasy, aplikacja powinna użyć GetEncoder metody implementacji Encoding .
Metoda GetByteCount określa, ile bajtów powoduje kodowanie zestawu znaków Unicode, a GetBytes metoda wykonuje rzeczywiste kodowanie. W klasie jest dostępnych Encoder kilka wersji obu tych metod. Aby uzyskać więcej informacji, zobacz Encoding.GetBytes.
Encoder Obiekt przechowuje informacje o stanie między kolejnymi wywołaniami GetBytes metod lubConvert, dzięki czemu może poprawnie kodować sekwencje znaków, które obejmują bloki. Obiekt Encoder zachowuje również końcowe znaki na końcu bloków danych i używa znaków końcowych w następnej operacji kodowania. Na przykład blok danych może kończyć się niedopasowanym wysokim zastępcą, a pasujący niski surogat może znajdować się w następnym bloku danych. W związku z tym i GetEncoder są przydatne w przypadku operacji transmisji i plików sieciowych, GetDecoder ponieważ te operacje często zajmują się blokami danych zamiast pełnego strumienia danych.
Note
Po zakończeniu działania aplikacji ze strumieniem danych należy upewnić się, że informacje o stanie są opróżniane przez ustawienie parametru flush na true w odpowiednim wywołaniu metody. W przypadku wystąpienia wyjątku lub przełączenia strumieni przez aplikację należy wywołać Reset metodę w celu wyczyszczenia stanu wewnętrznego Encoder obiektu.
Notatki dotyczące implementowania
Gdy aplikacja dziedziczy z tej klasy, musi zastąpić wszystkie elementy członkowskie.
Konstruktory
| Nazwa | Opis |
|---|---|
| Encoder() |
Inicjuje nowe wystąpienie klasy Encoder. |
Właściwości
| Nazwa | Opis |
|---|---|
| Fallback |
Pobiera lub ustawia EncoderFallback obiekt dla bieżącego Encoder obiektu. |
| FallbackBuffer |
EncoderFallbackBuffer Pobiera obiekt skojarzony z bieżącym Encoder obiektem. |
Metody
| Nazwa | Opis |
|---|---|
| Convert(Char[], Int32, Int32, Byte[], Int32, Int32, Boolean, Int32, Int32, Boolean) |
Konwertuje tablicę znaków Unicode na zakodowaną sekwencję bajtów i zapisuje wynik w tablicy bajtów. |
| Convert(Char*, Int32, Byte*, Int32, Boolean, Int32, Int32, Boolean) |
Konwertuje bufor znaków Unicode na zakodowaną sekwencję bajtów i zapisuje wynik w innym buforze. |
| Convert(ReadOnlySpan<Char>, Span<Byte>, Boolean, Int32, Int32, Boolean) |
Konwertuje zakres znaków Unicode na zakodowaną sekwencję bajtów i zapisuje wynik w innym buforze. |
| Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
| GetByteCount(Char[], Int32, Int32, Boolean) |
Po zastąpieniu w klasie pochodnej oblicza liczbę bajtów generowanych przez kodowanie zestawu znaków z określonej tablicy znaków. Parametr wskazuje, czy wyczyścić stan wewnętrzny kodera po obliczeniu. |
| GetByteCount(Char*, Int32, Boolean) |
Po zastąpieniu w klasie pochodnej oblicza liczbę bajtów generowanych przez kodowanie zestawu znaków rozpoczynających się od określonego wskaźnika znaków. Parametr wskazuje, czy wyczyścić stan wewnętrzny kodera po obliczeniu. |
| GetByteCount(ReadOnlySpan<Char>, Boolean) |
Po zastąpieniu w klasie pochodnej oblicza liczbę bajtów generowanych przez kodowanie zestawu znaków w zakresie "chars". Parametr wskazuje, czy wyczyścić stan wewnętrzny kodera po obliczeniu. |
| GetBytes(Char[], Int32, Int32, Byte[], Int32, Boolean) |
Po zastąpieniu w klasie pochodnej koduje zestaw znaków z określonej tablicy znaków i wszelkie znaki w buforze wewnętrznym do określonej tablicy bajtów. Parametr wskazuje, czy wyczyścić stan wewnętrzny kodera po konwersji. |
| GetBytes(Char*, Int32, Byte*, Int32, Boolean) |
Po zastąpieniu w klasie pochodnej koduje zestaw znaków rozpoczynających się od określonego wskaźnika znaku i wszystkich znaków w buforze wewnętrznym w sekwencji bajtów przechowywanych począwszy od określonego wskaźnika bajtów. Parametr wskazuje, czy wyczyścić stan wewnętrzny kodera po konwersji. |
| GetBytes(ReadOnlySpan<Char>, Span<Byte>, Boolean) |
Po zastąpieniu w klasie pochodnej koduje zestaw znaków w zakresie znaków wejściowych i wszelkie znaki w buforze wewnętrznym w sekwencji bajtów przechowywanych w zakresie bajtów wejściowych. Parametr wskazuje, czy wyczyścić stan wewnętrzny kodera po konwersji. |
| GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
| GetType() |
Pobiera Type bieżącego wystąpienia. (Odziedziczone po Object) |
| MemberwiseClone() |
Tworzy płytkią kopię bieżącego Object. (Odziedziczone po Object) |
| Reset() |
Po zastąpieniu w klasie pochodnej ustawia koder z powrotem na jego stan początkowy. |
| ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |