XmlReader.ReadElementContentAsBinHex(Byte[], Int32, Int32) Metoda

Definicja

Odczytuje element i dekoduje zawartość 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

Parametry

buffer
Byte[]

Bufor, do którego ma zostać skopiowany otrzymany tekst.The buffer into which to copy the resulting text. Ta wartość nie może być null.This value cannot be null.

index
Int32

Przesunięcie do buforu, gdzie rozpocząć kopiowanie wyniku.The offset into the buffer where to start copying the result.

count
Int32

Maksymalna liczba bajtów do skopiowania do buforu.The maximum number of bytes to copy into the buffer. Rzeczywista liczba skopiowanych bajtów jest zwracana z tej metody.The actual number of bytes copied is returned from this method.

Zwraca

Liczba bajtów zapisywana w buforze.The number of bytes written to the buffer.

Wyjątki

Wartość buffer jest null.The buffer value is null.

Bieżący węzeł nie jest węzłem elementu.The current node is not an element node.

lub-or-

Metoda XmlReader została wywołana przed ukończeniem poprzedniej operacji asynchronicznej.An XmlReader method was called before a previous asynchronous operation finished. W takim przypadku InvalidOperationException jest generowany z komunikatem "asynchroniczna operacja jest już w toku".In this case, InvalidOperationException is thrown with the message "An asynchronous operation is already in progress."

Indeks w buforze lub indeksie + Count jest większy niż rozmiar przydzielonego buforu.The index into the buffer or index + count is larger than the allocated buffer size.

Implementacja XmlReader nie obsługuje tej metody.The XmlReader implementation does not support this method.

Element zawiera zawartość mieszaną.The element contains mixed-content.

Nie można przekonwertować zawartości na żądany typ.The content cannot be converted to the requested type.

Przykłady

Poniższy przykład odczytuje wbudowany zakodowany obraz BinHex.The following example reads an inline BinHex encoded image. BinHex dane są osadzane w elemencie <image>.The BinHex data is embedded within the <image> element. BinaryWriter jest używany do tworzenia nowego pliku danych binarnych.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

Uwagi

Ta metoda odczytuje zawartość elementu, dekoduje ją przy użyciu kodowania BinHex i zwraca zdekodowane bajty binarne (na przykład wbudowany obraz GIF zakodowany BinHexowo) do buforu.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.

Ta metoda może odczytywać tylko elementy prostej zawartości.This method can only read simple-content elements. Element może zawierać tekst, biały znak, znaczący odstęp, sekcje CDATA, komentarze i instrukcje przetwarzania.The element can contain text, white space, significant white space, CDATA sections, comments and processing instructions. Może również zawierać odwołania do jednostek, które są automatycznie rozszerzane.It can also contain entity references, which are automatically expanded. Element nie może mieć elementów podrzędnych.The element cannot have child elements.

Ta metoda jest bardzo podobna do metody ReadContentAsBinHex, z tą różnicą, że może być wywoływana tylko w typach węzłów elementów.This method is very similar to the ReadContentAsBinHex method except that it can only be called on element node types.

Jeśli wartość count jest większa niż liczba bajtów w dokumencie lub jeśli jest równa liczbie bajtów w dokumencie, XmlReader odczytuje wszystkie pozostałe bajty w dokumencie i zwraca liczbę odczytanych bajtów.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. Następne wywołanie metody XmlReader zwraca zero i przenosi czytnik do węzła po EndElement.The next XmlReader method call returns a zero and moves the reader to the node following the EndElement.

Jeśli wywołasz Read przed użyciem całej zawartości elementu, czytelnik może zachowywać się tak, jakby była używana pierwsza zawartość, a następnie Metoda Read została wywołana.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. Oznacza to, że czytnik odczyta cały tekst do momentu napotkania elementu końcowego.This means that the reader will read all the text until the end element is encountered. Następnie odczytaj węzeł tagu końcowego, Odczytaj następny węzeł, a następnie umieść go w następnym kolejnym węźle.It will then read the end tag node, read the next node, and then position itself on the next subsequent node.

Aby uzyskać asynchroniczną wersję tej metody, zobacz ReadElementContentAsBinHexAsync.For the asynchronous version of this method, see ReadElementContentAsBinHexAsync.

Dotyczy

Zobacz też