Decoder-Klasse
Konvertiert eine Folge codierter Bytes in Zeichen.
Namespace: System.Text
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class Decoder
'Usage
Dim instance As Decoder
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Decoder
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class Decoder abstract
/** @attribute SerializableAttribute() */
/** @attribute ComVisibleAttribute(true) */
public abstract class Decoder
SerializableAttribute
ComVisibleAttribute(true)
public abstract class Decoder
Hinweise
Beim Codieren werden Zeichen in eine Bytefolge transformiert. Beim Decodieren wird dieser Vorgang umgekehrt: Eine Folge codierter Bytes wird in Zeichen transformiert.
Eine Decoder-Klasse erhält die Zustandsinformationen zwischen aufeinander folgenden Aufrufen von GetChars aufrecht, damit Blöcke umfassende Bytefolgen korrekt decodiert werden können. Die Decoder-Klasse behält nachfolgende Bytes am Ende von Datenblöcken bei und verwendet sie im nächsten Decodierungsvorgang. Deshalb empfehlen sich GetDecoder und GetEncoder für Netzwerkübertragungs- und Dateivorgänge, da bei diesen Vorgängen oft Datenblöcke anstelle vollständiger Datenstreams verwendet werden.
Die GetCharCount-Methode bestimmt, wie viele Zeichen sich aus der Decodierung einer Bytefolge ergeben, und die GetChars-Methode führt die eigentliche Decodierung aus.
Zum Abrufen einer Instanz der Implementierung dieser Klasse verwenden Sie die GetDecoder-Methode einer Encoding-Implementierung.
Versionsaspekte
Ein Decoder-Objekt oder Encoder-Objekt kann während einer Konvertierungsoperation serialisiert werden. Der Zustand eines Objektes wird beibehalten, wenn es in der gleichen Version des .NET Framework deserialisiert wird, verliert ihn jedoch, wenn es in einer anderen Version deserialisiert wird.
Hinweise für Erben Wenn diese Klasse vererbt wird, müssen Sie alle Member überschreiben.
Beispiel
Das folgende Codebeispiel veranschaulicht, wie mit einer Decoder-Klasse zwei unterschiedliche Bytearrays in ein Zeichenarray konvertiert werden. Eines der Bytes des Zeichens liegt im anderen Array. Dies ähnelt dem internen Verfahren eines System.IO.StreamReader beim Lesen eines Streams.
Imports System
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
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);
}
}
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 ]) );
}
}
import System.*;
import System.Text.*;
public class Dec
{
public static void main(String[] args)
{
// 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.
ubyte bytes1[] = { 0x20, 0x23, 0xE2 };
ubyte bytes2[] = { 0x98, 0xA3 };
char chars[] = new char[3];
Decoder d = Encoding.get_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 (int iCtr = 0; iCtr < chars.length; iCtr++) {
char c = chars[iCtr];
Console.Write("U+{0} ",((Int16)c).ToString("X4"));
}
} //main
} //Dec
Vererbungshierarchie
System.Object
System.Text.Decoder
Threadsicherheit
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Plattformen
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
.NET Compact Framework
Unterstützt in: 2.0, 1.0