Encoder Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Egy karakterkészletet bájtok sorozatává alakít át.
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
- Öröklődés
-
Encoder
- Attribútumok
Példák
Az alábbi példa bemutatja, hogyan konvertálhat Unicode-karakterekből álló tömböt bájtblokkokká egy megadott kódolással. Összehasonlításként a karaktertömböt először a rendszer a következővel UTF7Encodingkódolja: . Ezután a karakterek tömbje egy 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]
'
Megjegyzések
Az osztály implementálásának egy példányának Encoder beszerzéséhez az alkalmazásnak a GetEncoder megvalósítás módszerét kell használnia Encoding .
A GetByteCount metódus meghatározza, hogy hány bájtot eredményez egy Unicode-karakterkészlet kódolása, és a GetBytes metódus végrehajtja a tényleges kódolást. Mindkét módszernek több verziója is elérhető az Encoder osztályban. További információért lásd Encoding.GetBytes.
Az Encoder objektumok állapotinformációkat tartanak fenn az egymást követő hívások GetBytes vagy Convert metódusok között, hogy megfelelően kódolhassák a blokkokra kiterjedő karaktersorozatokat. A Encoder záró karakterek az adatblokkok végén is megmaradnak, és a következő kódolási műveletben a záró karaktereket használják. Előfordulhat például, hogy egy adatblokk egy nem egyező magas helyettessel végződik, és a megfelelő alacsony helyettes a következő adatblokkban lesz.
GetDecoder
GetEncoder Ezért hasznos a hálózati átvitelhez és a fájlműveletekhez, mivel ezek a műveletek gyakran teljes adatfolyam helyett adatblokkokkal foglalkoznak.
Note
Ha az alkalmazás adatstreamdel van végrehajtva, győződjön meg arról, hogy az állapotinformációk ki lesznek ürítve, ha a flush paramétert true a megfelelő metódushívásban állítja be. Ha kivétel történik, vagy ha az alkalmazás streameket vált, az objektum belső állapotának Reset törlésére kell hívniaEncoder.
Megjegyzések az implementálókhoz
Amikor az alkalmazás örökli ezt az osztályt, felül kell bírálnia az összes tagot.
Konstruktorok
| Name | Description |
|---|---|
| Encoder() |
Inicializálja a Encoder osztály új példányát. |
Tulajdonságok
| Name | Description |
|---|---|
| Fallback |
Lekéri vagy beállítja EncoderFallback az aktuális Encoder objektum objektumát. |
| FallbackBuffer |
Lekéri az EncoderFallbackBuffer aktuális Encoder objektumhoz társított objektumot. |
Metódusok
| Name | Description |
|---|---|
| Convert(Char[], Int32, Int32, Byte[], Int32, Int32, Boolean, Int32, Int32, Boolean) |
Unicode-karakterek tömböt konvertál kódolt bájtsorozattá, és az eredményt bájtok tömbjében tárolja. |
| Convert(Char*, Int32, Byte*, Int32, Boolean, Int32, Int32, Boolean) |
Unicode-karakterek pufferét kódolt bájtsorozattá alakítja át, és az eredményt egy másik pufferben tárolja. |
| Convert(ReadOnlySpan<Char>, Span<Byte>, Boolean, Int32, Int32, Boolean) |
Unicode-karakterek sorozatát kódolt bájtsorozattá alakítja át, és az eredményt egy másik pufferben tárolja. |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| GetByteCount(Char[], Int32, Int32, Boolean) |
Származtatott osztályban felülbírálva kiszámítja a megadott karaktertömbből származó karakterkészlet kódolásával előállított bájtok számát. A paraméter azt jelzi, hogy a számítás után törölje-e a kódoló belső állapotát. |
| GetByteCount(Char*, Int32, Boolean) |
Származtatott osztályban felülbírálva kiszámítja a megadott karaktermutatótól kezdődő karakterkészlet kódolásával előállított bájtok számát. A paraméter azt jelzi, hogy a számítás után törölje-e a kódoló belső állapotát. |
| GetByteCount(ReadOnlySpan<Char>, Boolean) |
Származtatott osztályban felülbírálva kiszámítja a karakterkészlet karakterkészletének kódolásával előállított bájtok számát. A paraméter azt jelzi, hogy a számítás után törölje-e a kódoló belső állapotát. |
| GetBytes(Char[], Int32, Int32, Byte[], Int32, Boolean) |
Ha egy származtatott osztályban felül van bírálva, a megadott karaktertömb karakterkészletét és a belső pufferben lévő karaktereket a megadott bájttömbbe kódolja. A paraméter azt jelzi, hogy az átalakítás után törölje-e a kódoló belső állapotát. |
| GetBytes(Char*, Int32, Byte*, Int32, Boolean) |
Ha egy származtatott osztályban felülbírál, a megadott karaktermutatótól kezdődő karakterkészletet és a belső pufferben lévő karaktereket bájtok sorozatába kódolja, amelyek a megadott bájtmutatótól kezdve vannak tárolva. A paraméter azt jelzi, hogy az átalakítás után törölje-e a kódoló belső állapotát. |
| GetBytes(ReadOnlySpan<Char>, Span<Byte>, Boolean) |
Ha egy származtatott osztályban felülbírált, a bemeneti karaktertartományban szereplő karaktereket és a belső pufferben lévő karaktereket bájtok sorozatába kódolja, amelyeket a bemeneti bájtok között tárolnak. A paraméter azt jelzi, hogy az átalakítás után törölje-e a kódoló belső állapotát. |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| Reset() |
Ha egy származtatott osztályban felül van bírálva, a kódolót visszaállítja a kezdeti állapotra. |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |
Bővítő metódusok
| Name | Description |
|---|---|
| Convert(Encoder, ReadOnlySequence<Char>, IBufferWriter<Byte>, Boolean, Int64, Boolean) |
Kódolt bájtokká ReadOnlySequence<T> alakítja át a függvényt, és az eredményt a következőre |
| Convert(Encoder, ReadOnlySpan<Char>, IBufferWriter<Byte>, Boolean, Int64, Boolean) |
Bájttá ReadOnlySpan<T> alakítja az eredményt a használatával |