Encoder Osztály

Definíció

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 writerírja: .

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

Bájttá ReadOnlySpan<T> alakítja az eredményt a használatával encoder , és az eredményt a következőre writerírja: .

A következőre érvényes:

Lásd még