Califique este contenido
Contraer todo/Expandir todo Contraer todo
Esta página es específica de
Microsoft Visual Studio 2008/.NET Framework 3.5

Hay además otras versiones disponibles para:
Biblioteca de clases de .NET Framework
Decoder (Clase)

Actualización: noviembre 2007

Convierte una secuencia de bytes codificados en un conjunto de caracteres.

Espacio de nombres:  System.Text
Ensamblado:  mscorlib (en mscorlib.dll)
Visual Basic (Declaración)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class Decoder
Visual Basic (Uso)
Dim instance As Decoder
C#
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Decoder
Visual C++
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class Decoder abstract
J#
/** @attribute SerializableAttribute */ 
/** @attribute ComVisibleAttribute(true) */
public abstract class Decoder
JScript
public abstract class Decoder

Para obtener una instancia de una implementación de la clase Decoder, se debe usar en la aplicación el método GetDecoder de una implementación de Encoding.

El método GetCharCount determina el número de caracteres resultante de la descodificación de una secuencia de bytes, y el método GetChars realiza la descodificación real. Hay varias versiones de ambos métodos disponibles en la clase Decoder.

Un objeto Decoder mantiene la información de estado entre las llamadas sucesivas a los métodos GetChars o Convert, de modo que puede descodificar correctamente secuencias de bytes que abarquen distintos bloques. El objeto Decoder también conserva los bytes situados al final de los bloques de datos y los emplea en la siguiente operación de descodificación. Por tanto, GetDecoder y GetEncoder son útiles para transmisiones en red y las operaciones con archivos, dado que estas operaciones tratan a menudo con bloques de datos, no con secuencias de datos completas.

369e2xas.alert_note(es-es,VS.90).gifNota:

Cuando la aplicación ha terminado una secuencia de datos, debe establecer el parámetro flush en true en la llamada a método adecuada para garantizar que se vacíe la información de estado. Si se produce una excepción o si la aplicación modifica las secuencias, debe llamar a Reset para borrar el estado interno del objeto Decoder.

Consideraciones de versión

Decoder o el objeto Encoder se puede serializar durante una operación de conversión. El estado del objeto se conserva si se ha deserializado en la misma versión de .NET Framework, pero se pierde si se deserializa en otra versión.

Notas para los herederos:

Cuando una aplicación hereda de esta clase, debe invalidar todos los miembros.

En el siguiente ejemplo se muestra cómo usar Decoder para convertir dos matrices de bytes diferentes en una matriz de caracteres. Uno de los bytes de caracteres abarca las matrices. Esto es similar a lo que un objeto StreamReader hace internamente cuando lee una secuencia.

Visual Basic
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
C#
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);
    }
}
Visual 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 ]) );

   }
}

J#
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
System..::.Object
  System.Text..::.Decoder
Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC, Xbox 360

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0

XNA Framework

Compatible con: 2.0, 1.0
Contenido de la comunidad   ¿Qué es Community Content?
Agregar contenido nuevo RSS  Anotaciones
Processing
© 2009 Microsoft Corporation. Reservados todos los derechos. Temas legales | Marcas Registradas | Declaración de privacidad
Page view tracker