XmlReader.ReadElementContentAsBinHex(Byte[], Int32, Int32) Метод

Определение

Считывает элемент и декодирует содержимое BinHex.Reads the element and decodes the BinHex content.

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

Параметры

buffer
Byte[]

Буфер, в который копируется полученный текст.The buffer into which to copy the resulting text. Это значение не может быть равно null.This value cannot be null.

index
Int32

Смещение в буфере, с которого следует начать копировать результат.The offset into the buffer where to start copying the result.

count
Int32

Максимальное количество копируемых в буфер байтов.The maximum number of bytes to copy into the buffer. Этот метод возвращает фактическое количество скопированных байтов.The actual number of bytes copied is returned from this method.

Возвращаемое значение

Количество байтов, записанных в буфер.The number of bytes written to the buffer.

Исключения

Значение buffer равно null.The buffer value is null.

Текущий узел не является узлом элемента.The current node is not an element node.

-или--or-

Метод XmlReader вызван перед завершением предыдущей асинхронной операции.An XmlReader method was called before a previous asynchronous operation finished. В этом случае возникает исключение InvalidOperationException с сообщением "Асинхронная операция уже выполняется".In this case, InvalidOperationException is thrown with the message "An asynchronous operation is already in progress."

Значение индекса в буфере или сумма значений индекса и счетчика больше, чем выделенный размер буфера.The index into the buffer or index + count is larger than the allocated buffer size.

Реализация XmlReader не поддерживает данный метод.The XmlReader implementation does not support this method.

Элемент содержит смешанное содержимое.The element contains mixed-content.

Не удается преобразовать содержимое в требуемый тип.The content cannot be converted to the requested type.

Примеры

В следующем примере считывается встроенное BinHex кодированное изображение.The following example reads an inline BinHex encoded image. BinHex данные внедряются в элемент <image>.The BinHex data is embedded within the <image> element. Для создания нового двоичного файла данных используется BinaryWriter.A BinaryWriter is used to create a new binary data file.

public static void BinHexDecodeImageFile() {

  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 BinHex data.
        Console.WriteLine("\r\nReading BinHex...");
        BinaryWriter bw = new BinaryWriter(outputFile);
        while ((readBytes = reader.ReadElementContentAsBinHex(buffer, 0, 50))>0) {
            bw.Write(buffer, 0, readBytes);
        }
        outputFile.Close();
  }
}
Public Shared Sub BinHexDecodeImageFile() 
    
    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 BinHex data.
            Console.WriteLine(vbCr + vbLf + "Reading BinHex...")
            Dim bw As New BinaryWriter(outputFile)
            readBytes = reader.ReadElementContentAsBinHex(buffer, 0, 50)
            While (readBytes > 0)
                bw.Write(buffer, 0, readBytes)
                readBytes = reader.ReadElementContentAsBinHex(buffer, 0, 50)
            End While
            outputFile.Close()
        
    End Using

End Sub

Комментарии

Этот метод считывает содержимое элемента, декодирует его с помощью BinHex кодирования и возвращает раскодированные двоичные байты (например, встроенный BinHexзакодированный рисунок в формате GIF) в буфер.This method reads the element content, decodes it using BinHex encoding, and returns the decoded binary bytes (for example, an inline BinHex-encoded GIF image) into the buffer.

Этот метод может читать только элементы с простым содержимым.This method can only read simple-content elements. Элемент может содержать текст, пробелы, значащие пробелы, разделы CDATA, комментарии и инструкции по обработке.The element can contain text, white space, significant white space, CDATA sections, comments and processing instructions. Он также может содержать ссылки на сущности, которые автоматически развертываются.It can also contain entity references, which are automatically expanded. Элемент не может иметь дочерние элементы.The element cannot have child elements.

Этот метод очень похож на метод ReadContentAsBinHex, за исключением того, что он может вызываться только для типов узлов элементов.This method is very similar to the ReadContentAsBinHex method except that it can only be called on element node types.

Если значение count больше числа байтов в документе или равно числу байтов в документе, XmlReader считывает все оставшиеся байты в документе и возвращает число считанных байтов.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. Следующий вызов метода XmlReader возвращает ноль и перемещает модуль чтения на узел после EndElement.The next XmlReader method call returns a zero and moves the reader to the node following the EndElement.

При вызове Read до того, как будет использовано все содержимое элемента, читатель может вести себя так, как если бы первое содержимое было использовано, а затем был вызван метод Read.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. Это означает, что читатель считывает весь текст до тех пор, пока не будет обнаружен элемент End.This means that the reader will read all the text until the end element is encountered. Затем он считывает конечный узел тега, считывает следующий узел, а затем позиционирует себя на следующем следующем узле.It will then read the end tag node, read the next node, and then position itself on the next subsequent node.

Асинхронную версию этого метода см. в разделе ReadElementContentAsBinHexAsync.For the asynchronous version of this method, see ReadElementContentAsBinHexAsync.

Применяется к

Дополнительно