Decoder Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Конвертирует последовательность закодированных байтов в набор символов.
public ref class Decoder abstract
public abstract class Decoder
[System.Serializable]
public abstract class Decoder
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Decoder
type Decoder = class
[<System.Serializable>]
type Decoder = class
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Decoder = class
Public MustInherit Class Decoder
- Наследование
-
Decoder
- Атрибуты
Примеры
В следующем примере показано использование Decoder для преобразования двух разных массивов байтов в массив символов. Один из байтов символа охватывает массивы. Это похоже на то, что StreamReader объект делает внутри при чтении потока.
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 ]) );
}
}
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);
}
}
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
Комментарии
Чтобы получить экземпляр реализации Decoder класса , вызовите GetDecoder метод Encoding реализации.
GetCharCountМетод определяет, сколько символов приводит к декодированию последовательности байтов, и GetChars метод выполняет фактическое декодирование. Существует несколько версий обоих этих методов, доступных Decoder в классе . Для получения дополнительной информации см. Encoding.GetChars. Объект Decoder сохраняет сведения о состоянии между последовательными вызовами GetChars
методов или Convert , чтобы правильно декодировать последовательности байтов, охватывающие блоки.
DecoderТакже сохраняет конечные байты в конце блоков данных и использует конечные байты в следующей операции декодирования. Таким образом, и GetEncoder полезны для сетевой передачи и операций с файлами, GetDecoder так как эти операции часто используют блоки данных, а не полный поток данных.
Примечание
Когда приложение выполняется с потоком данных, оно должно убедиться, что сведения о состоянии сброшены, задав параметру flush
значение true
в соответствующем вызове метода. Если возникает исключение или приложение переключает потоки, оно должно вызвать Reset для очистки Decoder
внутреннего состояния объекта.
Примечания для тех, кто реализует этот метод
Когда приложение наследует от этого класса, оно должно переопределить все члены.
Конструкторы
Decoder() |
Инициализирует новый экземпляр класса Decoder. |
Свойства
Fallback |
Получает или задает объект DecoderFallback для текущего объекта Decoder. |
FallbackBuffer |
Получает объект DecoderFallbackBuffer, связанный с текущим объектом Decoder. |
Методы
Convert(Byte*, Int32, Char*, Int32, Boolean, Int32, Int32, Boolean) |
Преобразует буфер закодированных байтов в символы в кодировке UTF-16 и сохраняет результат в другом буфере. |
Convert(Byte[], Int32, Int32, Char[], Int32, Int32, Boolean, Int32, Int32, Boolean) |
Преобразует массив закодированных байтов в символы в кодировке UTF-16 и сохраняет результат в другом массиве символов. |
Convert(ReadOnlySpan<Byte>, Span<Char>, Boolean, Int32, Int32, Boolean) |
Преобразует диапазон закодированных байтов в символы в кодировке UTF-16 и сохраняет результат в другом буфере диапазона. |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetCharCount(Byte*, Int32, Boolean) |
При переопределении в производном классе вычисляет количество символов, полученных при декодировании последовательности байтов, начало которой задается указателем байтов. Параметр указывает, следует ли очистить внутреннее состояние декодера после вычисления. |
GetCharCount(Byte[], Int32, Int32) |
При переопределении в производном классе вычисляет количество символов, полученных при декодировании последовательности байтов из заданного массива байтов. |
GetCharCount(Byte[], Int32, Int32, Boolean) |
При переопределении в производном классе вычисляет количество символов, полученных при декодировании последовательности байтов из заданного массива байтов. Параметр указывает, следует ли очистить внутреннее состояние декодера после вычисления. |
GetCharCount(ReadOnlySpan<Byte>, Boolean) |
При переопределении в производном классе вычисляет число символов, полученных при декодировании последовательности байтов в диапазоне. Параметр указывает, следует ли очистить внутреннее состояние декодера после вычисления. |
GetChars(Byte*, Int32, Char*, Int32, Boolean) |
При переопределении в производном классе декодирует последовательность байтов, начало которой задается указателем байтов, и все байты, расположенные во внутреннем буфере, в набор символов, которые сохраняются, начиная с заданного указателя символов. Параметр указывает, следует ли очистить внутреннее состояние декодера после выполнения преобразования. |
GetChars(Byte[], Int32, Int32, Char[], Int32) |
При переопределении в производном классе декодирует последовательность байтов из заданного массива байтов и все байты, расположенные во внутреннем буфере, в указанный массив символов. |
GetChars(Byte[], Int32, Int32, Char[], Int32, Boolean) |
При переопределении в производном классе декодирует последовательность байтов из заданного массива байтов и все байты, расположенные во внутреннем буфере, в указанный массив символов. Параметр указывает, следует ли очистить внутреннее состояние декодера после выполнения преобразования. |
GetChars(ReadOnlySpan<Byte>, Span<Char>, Boolean) |
При переопределении в производном классе декодирует последовательность байтов из диапазона и все байты во внутреннем буфере в набор символов, которые сохраняются, начиная с заданного указателя символа. Параметр указывает, следует ли очистить внутреннее состояние декодера после выполнения преобразования. |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
Reset() |
При переопределении в производном классе возвращает декодер в исходное состояние. |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Методы расширения
Convert(Decoder, ReadOnlySequence<Byte>, IBufferWriter<Char>, Boolean, Int64, Boolean) |
Преобразует ReadOnlySequence<T> в символы в кодировке UTF-16 и записывает результат в |
Convert(Decoder, ReadOnlySpan<Byte>, IBufferWriter<Char>, Boolean, Int64, Boolean) |
Преобразует ReadOnlySpan<T> в символы с помощью |