XmlReader.ReadElementContentAsBase64(Byte[], Int32, Int32) Método

Definição

Lê o elemento e decodifica o conteúdo de Base64.Reads the element and decodes the Base64 content.

public:
 virtual int ReadElementContentAsBase64(cli::array <System::Byte> ^ buffer, int index, int count);
public virtual int ReadElementContentAsBase64 (byte[] buffer, int index, int count);
abstract member ReadElementContentAsBase64 : byte[] * int * int -> int
override this.ReadElementContentAsBase64 : byte[] * int * int -> int
Public Overridable Function ReadElementContentAsBase64 (buffer As Byte(), index As Integer, count As Integer) As Integer

Parâmetros

buffer
Byte[]

O buffer para o qual o texto resultante será copiado.The buffer into which to copy the resulting text. Este valor pode não ser null.This value cannot be null.

index
Int32

O deslocamento do buffer no qual o resultado começará a ser copiado.The offset into the buffer where to start copying the result.

count
Int32

O número máximo de bytes a serem copiados para o buffer.The maximum number of bytes to copy into the buffer. O número real de bytes copiados é retornado deste método.The actual number of bytes copied is returned from this method.

Retornos

Int32

O número de bytes gravados no buffer.The number of bytes written to the buffer.

Exceções

O valor buffer é null.The buffer value is null.

O nó atual não é um nó de elemento.The current node is not an element node.

- ou --or-

Um método XmlReader foi chamado antes do término de uma operação assíncrona anterior.An XmlReader method was called before a previous asynchronous operation finished. Nesse caso, InvalidOperationException será gerado com a mensagem “Uma operação assíncrona já está em andamento”.In this case, InvalidOperationException is thrown with the message "An asynchronous operation is already in progress."

O índice de buffer ou de índice + contagem é maior que o tamanho do buffer alocado.The index into the buffer or index + count is larger than the allocated buffer size.

A implementação XmlReader não dá suporte a esse método.The XmlReader implementation does not support this method.

O elemento contém conteúdo misto.The element contains mixed-content.

Não é possível converter conteúdo no tipo solicitado.The content cannot be converted to the requested type.

Exemplos

O exemplo a seguir lê uma Base64 imagem codificada embutida.The following example reads an inline Base64 encoded image. Os Base64 dados são inseridos dentro do <image> elemento.The Base64 data is embedded within the <image> element. Um BinaryWriter é usado para criar um novo arquivo de dados binários.A BinaryWriter is used to create a new binary data file.


public static void Base64DecodeImageFile() {

  byte[] buffer = new byte[1000];
  int readBytes = 0;

  using (XmlReader reader = XmlReader.Create("output.xml")) {
                    
        FileStream outputFile = new FileStream(@"C:\artFiles\data\newImage.jpg",
                    FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write);
        // Read to the image element.
        reader.ReadToFollowing("image");
        // Read the Base64 data.
        Console.WriteLine("\r\nReading Base64...");
        BinaryWriter bw = new BinaryWriter(outputFile);
        while ((readBytes = reader.ReadElementContentAsBase64(buffer, 0, 50))>0) {
            bw.Write(buffer, 0, readBytes);
        }
        outputFile.Close();
  }
}
Public Shared Sub Base64DecodeImageFile() 
    
    Dim buffer(999) As Byte
    Dim readBytes As Integer = 0
    
    Using reader As XmlReader = XmlReader.Create("output.xml")

            Dim outputFile As New FileStream("C:\artFiles\data\newImage.jpg", FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write)
            ' Read to the image element.
            reader.ReadToFollowing("image")
            ' Read the Base64 data.
            Console.WriteLine(vbCr + vbLf + "Reading Base64...")
            Dim bw As New BinaryWriter(outputFile)
            readBytes = reader.ReadElementContentAsBase64(buffer, 0, 50)
            While (readBytes > 0)
                bw.Write(buffer, 0, readBytes)
                readBytes = reader.ReadElementContentAsBase64(buffer, 0, 50)
            End While
            outputFile.Close()
        
    End Using

End Sub

Comentários

Esse método lê o conteúdo do elemento, decodifica-o usando Base64 codificação e retorna os bytes binários decodificados (por exemplo, uma Base64 imagem GIF codificada em linha) para o buffer.This method reads the element content, decodes it using Base64 encoding, and returns the decoded binary bytes (for example, an inline Base64-encoded GIF image) into the buffer. Para obter mais informações, consulte RFC 1521, "MIME (Multipurpose Internet Mail Extensions) Part One: mecanismos para especificar e descrever o formato de corpos de mensagens da Internet".For more information, see RFC 1521, "MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies". Você pode obter RFCs no site da Web Request for Comments.You can obtain RFCs from the Request for Comments Web site.

ReadElementContentAsBase64 Só é possível ler elementos de conteúdo simples.ReadElementContentAsBase64 can only read simple-content elements. O elemento pode conter texto, espaço em branco, espaço em branco significativo, seções CDATA, comentários e instruções de processamento.The element can contain text, white space, significant white space, CDATA sections, comments and processing instructions. Ele também pode conter referências de entidade, que são automaticamente expandidas.It can also contain entity references, which are automatically expanded. O elemento não pode ter elementos filho.The element cannot have child elements.

Esse método é muito semelhante ao ReadContentAsBase64 método, exceto que ele só pode ser chamado em tipos de nó de elemento.This method is very similar to the ReadContentAsBase64 method except that it can only be called on element node types.

Se o count valor for maior que o número de bytes no documento, ou se for igual ao número de bytes no documento, o XmlReader lerá todos os bytes restantes no documento e retornará o número de bytes lidos.If the count value is higher than the number of bytes in the document, or if it is equal to the number of bytes in the document, the XmlReader reads all the remaining bytes in the document and returns the number of bytes read. A próxima XmlReader chamada de método retorna um zero e move o leitor para o nó após o EndElement .The next XmlReader method call returns a zero and moves the reader to the node following the EndElement.

Se você chamar Read antes que todo o conteúdo do elemento seja consumido, o leitor poderá se comportar como se o primeiro conteúdo fosse consumido e, em seguida, o Read método foi chamado.If you call Read before all of the element content is consumed, the reader may behave as if the first content was consumed and then the Read method was called. Isso significa que o leitor lerá todo o texto até que o elemento final seja encontrado.This means that the reader will read all the text until the end element is encountered. Em seguida, ele lerá o nó de marca de fim, lerá o próximo nó e posicionará-se no próximo nó subsequente.It will then read the end tag node, read the next node, and then position itself on the next subsequent node.

Para obter a versão assíncrona desse método, consulte ReadElementContentAsBase64Async .For the asynchronous version of this method, see ReadElementContentAsBase64Async.

Aplica-se a

Confira também