Encoder Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mengonversi sekumpulan karakter menjadi urutan byte.
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
- Warisan
-
Encoder
- Atribut
Contoh
Contoh berikut menunjukkan cara mengonversi array karakter Unicode menjadi blok byte menggunakan pengodean tertentu. Sebagai perbandingan, array karakter pertama kali dikodekan menggunakan UTF7Encoding. Selanjutnya, array karakter dikodekan menggunakan Encoder.
using namespace System;
using namespace System::Text;
using namespace System::Collections;
void ShowArray( Array^ theArray )
{
IEnumerator^ myEnum = theArray->GetEnumerator();
while ( myEnum->MoveNext() )
{
Object^ o = safe_cast<Object^>(myEnum->Current);
Console::Write( "[{0}]", o );
}
Console::WriteLine( "\n" );
}
int main()
{
// The characters to encode.
// Pi
// Sigma
array<Char>^chars = {L'\u03a0',L'\u03a3',L'\u03a6',L'\u03a9'};
// Encode characters using an Encoding Object*.
Encoding^ encoding = Encoding::UTF7;
Console::WriteLine( "Using Encoding\n--------------" );
// Encode complete array for comparison.
array<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.
array<Byte>^firstchar = encoding->GetBytes( chars, 0, 1 );
Console::WriteLine( "First character:" );
ShowArray( firstchar );
array<Byte>^secondchar = encoding->GetBytes( chars, 1, 1 );
Console::WriteLine( "Second character:" );
ShowArray( secondchar );
array<Byte>^thirdchar = encoding->GetBytes( chars, 2, 1 );
Console::WriteLine( "Third character:" );
ShowArray( thirdchar );
array<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.
array<Byte>^allCharactersFromEncoder = gcnew array<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.
array<Byte>^firstcharNoFlush = gcnew array<Byte>(encoder->GetByteCount( chars, 0, 1, bFlushState ));
encoder->GetBytes( chars, 0, 1, firstcharNoFlush, 0, bFlushState );
Console::WriteLine( "First character:" );
ShowArray( firstcharNoFlush );
array<Byte>^secondcharNoFlush = gcnew array<Byte>(encoder->GetByteCount( chars, 1, 1, bFlushState ));
encoder->GetBytes( chars, 1, 1, secondcharNoFlush, 0, bFlushState );
Console::WriteLine( "Second character:" );
ShowArray( secondcharNoFlush );
array<Byte>^thirdcharNoFlush = gcnew array<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;
array<Byte>^fourthcharNoFlush = gcnew array<Byte>(encoder->GetByteCount( chars, 3, 1, bFlushState ));
encoder->GetBytes( chars, 3, 1, fourthcharNoFlush, 0, bFlushState );
Console::WriteLine( "Fourth character:" );
ShowArray( fourthcharNoFlush );
}
/* This code example produces the following output.
Using Encoding
--------------
All characters encoded:
[43][65][54][65][68][111][119][79][109][65][54][107][45]
First character:
[43][65][54][65][45]
Second character:
[43][65][54][77][45]
Third character:
[43][65][54][89][45]
Fourth character:
[43][65][54][107][45]
Using Encoder
-------------
All characters encoded:
[43][65][54][65][68][111][119][79][109][65][54][107][45]
First character:
[43][65][54]
Second character:
[65][68][111]
Third character:
[119][79][109]
Fourth character:
[65][54][107][45]
*/
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]
'
Keterangan
Untuk mendapatkan instans implementasi Encoder kelas , aplikasi harus menggunakan GetEncoder metode implementasi Encoding .
Metode ini GetByteCount menentukan berapa banyak byte yang menghasilkan pengodean sekumpulan karakter Unicode, dan GetBytes metode melakukan pengodean aktual. Ada beberapa versi dari kedua metode ini yang tersedia di Encoder kelas . Untuk informasi selengkapnya, lihat Encoding.GetBytes.
Objek Encoder mempertahankan informasi status antara panggilan berturut-turut ke GetBytes
atau Convert metode sehingga dapat mengodekan urutan karakter yang mencakup blok dengan benar. juga Encoder mempertahankan karakter berikutnya di akhir blok data dan menggunakan karakter berikutnya dalam operasi pengodean berikutnya. Misalnya, blok data mungkin diakhiri dengan pengganti tinggi yang tidak cocok, dan pengganti rendah yang cocok mungkin berada di blok data berikutnya. Oleh karena itu, GetDecoder dan GetEncoder berguna untuk transmisi jaringan dan operasi file, karena operasi tersebut sering berurusan dengan blok data alih-alih aliran data lengkap.
Catatan
Ketika aplikasi dilakukan dengan aliran data, aplikasi harus memastikan bahwa informasi status dibersihkan dengan mengatur flush
parameter ke true
dalam panggilan metode yang sesuai. Jika pengecualian terjadi atau jika aplikasi beralih aliran, aplikasi harus memanggil Reset untuk menghapus status Encoder
internal objek.
Catatan Bagi Implementer
Ketika aplikasi Anda mewarisi dari kelas ini, aplikasi harus mengambil alih semua anggota.
Konstruktor
Encoder() |
Menginisialisasi instans baru kelas Encoder. |
Properti
Fallback |
Mendapatkan atau mengatur EncoderFallback objek untuk objek saat ini Encoder . |
FallbackBuffer |
Mendapatkan objek yang EncoderFallbackBuffer terkait dengan objek saat ini Encoder . |
Metode
Convert(Char*, Int32, Byte*, Int32, Boolean, Int32, Int32, Boolean) |
Mengonversi buffer karakter Unicode ke urutan byte yang dikodekan dan menyimpan hasilnya dalam buffer lain. |
Convert(Char[], Int32, Int32, Byte[], Int32, Int32, Boolean, Int32, Int32, Boolean) |
Mengonversi array karakter Unicode menjadi urutan byte yang dikodekan dan menyimpan hasilnya dalam array byte. |
Convert(ReadOnlySpan<Char>, Span<Byte>, Boolean, Int32, Int32, Boolean) |
Mengonversi rentang karakter Unicode menjadi urutan byte yang dikodekan dan menyimpan hasilnya di buffer lain. |
Equals(Object) |
Menentukan apakah objek yang ditentukan sama dengan objek saat ini. (Diperoleh dari Object) |
GetByteCount(Char*, Int32, Boolean) |
Saat ditimpa dalam kelas turunan, menghitung jumlah byte yang dihasilkan dengan mengodekan sekumpulan karakter yang dimulai pada penunjuk karakter yang ditentukan. Parameter menunjukkan apakah akan menghapus status internal encoder setelah perhitungan. |
GetByteCount(Char[], Int32, Int32, Boolean) |
Saat ditimpa dalam kelas turunan, menghitung jumlah byte yang dihasilkan dengan mengodekan sekumpulan karakter dari array karakter yang ditentukan. Parameter menunjukkan apakah akan menghapus status internal encoder setelah perhitungan. |
GetByteCount(ReadOnlySpan<Char>, Boolean) |
Ketika ditimpa dalam kelas turunan, menghitung jumlah byte yang dihasilkan dengan mengodekan sekumpulan karakter dalam rentang 'karakter'. Parameter menunjukkan apakah akan menghapus status internal encoder setelah perhitungan. |
GetBytes(Char*, Int32, Byte*, Int32, Boolean) |
Saat ditimpa dalam kelas turunan, mengodekan sekumpulan karakter yang dimulai pada penunjuk karakter yang ditentukan dan karakter apa pun di buffer internal ke dalam urutan byte yang disimpan mulai dari penunjuk byte yang ditentukan. Parameter menunjukkan apakah akan menghapus status internal encoder setelah konversi. |
GetBytes(Char[], Int32, Int32, Byte[], Int32, Boolean) |
Saat ditimpa di kelas turunan, mengodekan sekumpulan karakter dari array karakter yang ditentukan dan karakter apa pun dalam buffer internal ke dalam array byte yang ditentukan. Parameter menunjukkan apakah akan menghapus status internal encoder setelah konversi. |
GetBytes(ReadOnlySpan<Char>, Span<Byte>, Boolean) |
Ketika ditimpa di kelas turunan, mengodekan sekumpulan karakter dalam rentang karakter input dan karakter apa pun di buffer internal ke dalam urutan byte yang disimpan dalam rentang byte input. Parameter menunjukkan apakah akan menghapus status internal encoder setelah konversi. |
GetHashCode() |
Berfungsi sebagai fungsi hash default. (Diperoleh dari Object) |
GetType() |
Mendapatkan dari instans Type saat ini. (Diperoleh dari Object) |
MemberwiseClone() |
Membuat salinan dangkal dari saat ini Object. (Diperoleh dari Object) |
Reset() |
Ketika ditimpa di kelas turunan, mengatur encoder kembali ke status awalnya. |
ToString() |
Mengembalikan string yang mewakili objek saat ini. (Diperoleh dari Object) |
Metode Ekstensi
Convert(Encoder, ReadOnlySequence<Char>, IBufferWriter<Byte>, Boolean, Int64, Boolean) |
Mengonversi byte yang ReadOnlySequence<T> dikodekan ke dan menulis hasilnya menjadi |
Convert(Encoder, ReadOnlySpan<Char>, IBufferWriter<Byte>, Boolean, Int64, Boolean) |
ReadOnlySpan<T> Mengonversi ke byte menggunakan |