Udostępnij za pośrednictwem


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

Definicja

Odczytuje element i dekoduje Base64 zawartość.

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

Parametry

buffer
Byte[]

Bufor, do którego ma być skopiowany wynikowy tekst. Ta wartość nie może być wartością null.

index
Int32

Przesunięcie do buforu, w którym należy rozpocząć kopiowanie wyniku.

count
Int32

Maksymalna liczba bajtów do skopiowania do buforu. Rzeczywista liczba skopiowanych bajtów jest zwracana z tej metody.

Zwraca

Liczba bajtów zapisanych w buforze.

Wyjątki

Wartość elementu buffer to null.

Bieżący węzeł nie jest węzłem elementu.

-lub-

Metoda XmlReader została wywołana przed zakończeniem poprzedniej operacji asynchronicznej. W takim przypadku InvalidOperationException jest zgłaszany komunikat "Operacja asynchroniczna jest już w toku".

Indeks do buforu lub indeksu + liczba jest większy niż przydzielony rozmiar buforu.

Implementacja XmlReader nie obsługuje tej metody.

Element zawiera zawartość mieszaną.

Nie można przekonwertować zawartości na żądany typ.

Przykłady

Poniższy przykład odczytuje wbudowany obraz zakodowany w tekście Base64 . Dane Base64 są osadzone w elemecie <image> . Element BinaryWriter służy do tworzenia nowego pliku danych binarnych.


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

Uwagi

Ta metoda odczytuje zawartość elementu, dekoduje ją przy użyciu Base64 kodowania i zwraca dekodowane bajty binarne (na przykład wbudowany obraz GIF zakodowany w tekście Base64) do buforu. Aby uzyskać więcej informacji, zobacz RFC 1521, "MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies" (Wielozadaniowe rozszerzenia poczty internetowej). Dokumenty RFC można uzyskać z witryny internetowej Żądania komentarzy.

ReadElementContentAsBase64 może odczytywać tylko elementy prostej zawartości. Element może zawierać tekst, biały znak, istotne białe znaki, sekcje CDATA, komentarze i instrukcje przetwarzania. Może również zawierać odwołania do jednostek, które są automatycznie rozwijane. Element nie może mieć elementów podrzędnych.

Ta metoda jest bardzo podobna ReadContentAsBase64 do metody, z tą różnicą, że może być wywoływana tylko w typach węzłów elementów.

count Jeśli wartość 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. Następne XmlReader wywołanie metody zwraca zero i przenosi czytnik do węzła następującego po .EndElement

Jeśli wywołasz wywołanie Read przed użyciem całej zawartości elementu, czytnik może zachowywać się tak, jakby pierwsza zawartość została zużyta, a następnie Read została wywołana metoda. Oznacza to, że czytnik odczyta cały tekst do momentu napotkania elementu końcowego. Następnie odczytuje węzeł tagu końcowego, odczytuje następny węzeł, a następnie pozycjonuje się w następnym kolejnym węźle.

Aby uzyskać asynchroniczną wersję tej metody, zobacz ReadElementContentAsBase64Async.

Dotyczy

Zobacz też