Auf Englisch lesen

Freigeben über


DataReader Klasse

Definition

Liest Daten aus einem Eingabedatenstrom.

C#
[Windows.Foundation.Metadata.Activatable(typeof(Windows.Storage.Streams.IDataReaderFactory), 65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class DataReader : System.IDisposable, IDataReader
C#
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(typeof(Windows.Storage.Streams.IDataReaderFactory), 65536, "Windows.Foundation.UniversalApiContract")]
public sealed class DataReader : System.IDisposable, IDataReader
Vererbung
Object DataReader
Attribute
Implementiert

Windows-Anforderungen

Gerätefamilie
Windows 10 (eingeführt in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (eingeführt in v1.0)

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie Zeichenfolgen in einen In-Memory-Stream geschrieben und gelesen werden. Die vollständige Beispielanwendung in C# und in C++/CX finden Sie unter Serialisieren und Deserialisieren von Datenbeispielen.

C#
using System;
using System.Diagnostics;
using Windows.Foundation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

// This is the click handler for the 'Copy Strings' button.  Here we will parse the
// strings contained in the ElementsToWrite text block, write them to a stream using
// DataWriter, retrieve them using DataReader, and output the results in the
// ElementsRead text block.
private async void TransferData(object sender, RoutedEventArgs e)
{
    // Initialize the in-memory stream where data will be stored.
    using (var stream = new Windows.Storage.Streams.InMemoryRandomAccessStream())
    {
        // Create the data writer object backed by the in-memory stream.
        using (var dataWriter = new Windows.Storage.Streams.DataWriter(stream))
        {
            dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
            dataWriter.ByteOrder = Windows.Storage.Streams.ByteOrder.LittleEndian;

            // Parse the input stream and write each element separately.
            string[] inputElements = ElementsToWrite.Text.Split(';');
            foreach (string inputElement in inputElements)
            {
                uint inputElementSize = dataWriter.MeasureString(inputElement);
                dataWriter.WriteUInt32(inputElementSize);
                dataWriter.WriteString(inputElement);
            }

            // Send the contents of the writer to the backing stream.
            await dataWriter.StoreAsync();

            // For the in-memory stream implementation we are using, the flushAsync call 
            // is superfluous,but other types of streams may require it.
            await dataWriter.FlushAsync();

            // In order to prolong the lifetime of the stream, detach it from the 
            // DataWriter so that it will not be closed when Dispose() is called on 
            // dataWriter. Were we to fail to detach the stream, the call to 
            // dataWriter.Dispose() would close the underlying stream, preventing 
            // its subsequent use by the DataReader below.
            dataWriter.DetachStream();
        }

        // Create the input stream at position 0 so that the stream can be read 
        // from the beginning.
        using (var inputStream = stream.GetInputStreamAt(0))
        {
            using (var dataReader = new Windows.Storage.Streams.DataReader(inputStream))
            {
                // The encoding and byte order need to match the settings of the writer 
                // we previously used.
                dataReader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
                dataReader.ByteOrder = Windows.Storage.Streams.ByteOrder.LittleEndian;

                // Once we have written the contents successfully we load the stream.
                await dataReader.LoadAsync((uint)stream.Size);

                var receivedStrings = "";

                // Keep reading until we consume the complete stream.
                while (dataReader.UnconsumedBufferLength > 0)
                {
                    // Note that the call to readString requires a length of "code units" 
                    // to read. This is the reason each string is preceded by its length 
                    // when "on the wire".
                    uint bytesToRead = dataReader.ReadUInt32();
                    receivedStrings += dataReader.ReadString(bytesToRead) + "\n";
                }

                // Populate the ElementsRead text block with the items we read 
                // from the stream.
                ElementsRead.Text = receivedStrings;
            }
        }
    }
}

Hinweise

Instanzen von DataReader-Objekten unterstützen keine gleichzeitigen Lesevorgänge. Wenn eine Anwendung gleichzeitig einen Datenstrom aus einem DataReader-instance, aus dem gelesen wird, liest oder trennt, schlägt der Aufruf des Objekts mit dem Fehler HRESULT_FROM_WIN32(ERROR_INVALID_OPERATION) fehl.

Konstruktoren

DataReader(IInputStream)

Erstellt und initialisiert eine neue instance des Datenlesers.

Eigenschaften

ByteOrder

Ruft die Bytereihenfolge der Daten im Eingabedatenstrom ab oder legt diese fest.

InputStreamOptions

Ruft die Leseoptionen für den Eingabestream ab oder legt diese fest.

UnconsumedBufferLength

Ruft die Größe des Puffers ab, der nicht gelesen wurde.

UnicodeEncoding

Ruft die Unicode-Zeichencodierung für den Eingabedatenstrom ab oder legt diese fest.

Methoden

Close()

Schließt den aktuellen Stream und gibt Systemressourcen frei.

DetachBuffer()

Trennt den Puffer, der dem Datenleser zugeordnet ist. Dies ist nützlich, wenn Sie den Puffer beibehalten möchten, nachdem Sie den Datenleser verworfen haben.

DetachStream()

Trennt den Stream, der dem Datenleser zugeordnet ist.

Dispose()

Führt anwendungsspezifische Aufgaben durch, die mit der Freigabe, der Zurückgabe oder dem Zurücksetzen von nicht verwalteten Ressourcen zusammenhängen.

FromBuffer(IBuffer)

Erstellt eine neue instance des Datenlesers mit Daten aus dem angegebenen Puffer.

LoadAsync(UInt32)

Lädt Daten aus dem Eingabedatenstrom.

ReadBoolean()

Liest einen booleschen Wert aus dem Eingabedatenstrom.

ReadBuffer(UInt32)

Liest einen Puffer aus dem Eingabedatenstrom.

ReadByte()

Liest einen Bytewert aus dem Eingabedatenstrom.

ReadBytes(Byte[])

Liest ein Array von Bytewerten aus dem Eingabedatenstrom.

ReadDateTime()

Liest einen Datums- und Uhrzeitwert aus dem Eingabedatenstrom.

ReadDouble()

Liest einen Gleitkommawert aus dem Eingabedatenstrom.

ReadGuid()

Liest einen GUID-Wert aus dem Eingabedatenstrom.

ReadInt16()

Liest einen ganzzahligen 16-Bit-Wert aus dem Eingabedatenstrom.

ReadInt32()

Liest einen ganzzahligen 32-Bit-Wert aus dem Eingabedatenstrom.

ReadInt64()

Liest einen ganzzahligen 64-Bit-Wert aus dem Eingabedatenstrom.

ReadSingle()

Liest einen Gleitkommawert aus dem Eingabedatenstrom.

ReadString(UInt32)

Liest einen Zeichenfolgenwert aus dem Eingabedatenstrom.

ReadTimeSpan()

Liest einen Zeitintervallwert aus dem Eingabedatenstrom.

ReadUInt16()

Liest eine 16-Bit-Ganzzahl ohne Vorzeichen aus dem Eingabedatenstrom.

ReadUInt32()

Liest eine 32-Bit-Ganzzahl ohne Vorzeichen aus dem Eingabedatenstrom.

ReadUInt64()

Liest eine 64-Bit-Ganzzahl ohne Vorzeichen aus dem Eingabedatenstrom.

Gilt für:

Produkt Versionen
WinRT Build 10240, Build 10586, Build 14383, Build 15063, Build 16299, Build 17134, Build 17763, Build 18362, Build 19041, Build 20348, Build 22000, Build 22621, Build 26100

Weitere Informationen