Stream.Read Metoda

Definicja

Przeciążenia

Read(Span<Byte>)

Po zastąpieniu w klasie pochodnej odczytuje sekwencję bajtów z bieżącego strumienia i rozwija pozycję w strumieniu według liczby odczytanych bajtów.

Read(Byte[], Int32, Int32)

Po zastąpieniu w klasie pochodnej odczytuje sekwencję bajtów z bieżącego strumienia i rozwija pozycję w strumieniu według liczby odczytanych bajtów.

Read(Span<Byte>)

Po zastąpieniu w klasie pochodnej odczytuje sekwencję bajtów z bieżącego strumienia i rozwija pozycję w strumieniu według liczby odczytanych bajtów.

public:
 virtual int Read(Span<System::Byte> buffer);
public virtual int Read (Span<byte> buffer);
abstract member Read : Span<byte> -> int
override this.Read : Span<byte> -> int
Public Overridable Function Read (buffer As Span(Of Byte)) As Integer

Parametry

buffer
Span<Byte>

Region pamięci. Gdy ta metoda zwróci, zawartość tego regionu jest zastępowana bajtami odczytanych z bieżącego źródła.

Zwraca

Całkowita liczba bajtów odczytanych do buforu. Może to być mniejsze niż rozmiar buforu, jeśli liczba bajtów nie jest obecnie dostępna, lub zero (0), jeśli długość buforu wynosi zero lub osiągnięto koniec strumienia.

Uwagi

Użyj właściwości , CanRead aby określić, czy bieżące wystąpienie obsługuje odczytywanie. ReadAsync Użyj metody , aby odczytywać asynchronicznie z bieżącego strumienia.

Implementacje tej metody odczytują maksymalnie buffer.Length bajty z bieżącego strumienia i przechowują je w pliku buffer. Bieżąca pozycja w strumieniu jest zaawansowana przez liczbę odczytanych bajtów; jeśli jednak wystąpi wyjątek, bieżąca pozycja w strumieniu pozostaje niezmieniona. Implementacje zwracają liczbę odczytanych bajtów. Jeśli zażądano więcej niż zero bajtów, implementacja nie zakończy operacji, dopóki nie będzie można odczytać co najmniej jednego bajtu danych (jeśli zażądano zera bajtów, niektóre implementacje mogą być podobnie nie ukończone, dopóki co najmniej jeden bajt nie będzie dostępny, ale żadne dane nie będą używane ze strumienia w takim przypadku). Read Zwraca wartość 0 tylko wtedy, gdy zażądano zero bajtów lub gdy nie ma więcej danych w strumieniu i nie ma więcej danych (na przykład zamknięte gniazdo lub koniec pliku). Implementacja jest bezpłatna, aby zwrócić mniej bajtów niż żądano, nawet jeśli koniec strumienia nie został osiągnięty.

Służy BinaryReader do odczytywania typów danych pierwotnych.

Dotyczy

Read(Byte[], Int32, Int32)

Po zastąpieniu w klasie pochodnej odczytuje sekwencję bajtów z bieżącego strumienia i rozwija pozycję w strumieniu według liczby odczytanych bajtów.

public:
 abstract int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public abstract int Read (byte[] buffer, int offset, int count);
abstract member Read : byte[] * int * int -> int
Public MustOverride Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer

Parametry

buffer
Byte[]

Tablica bajtów. Gdy ta metoda zwróci, bufor zawiera określoną tablicę bajtów z wartościami między offset i (offset + count - 1) zastąpionymi bajtami odczytanymi z bieżącego źródła.

offset
Int32

Przesunięcie bajtów na podstawie zera, w buffer którym rozpocznie się przechowywanie danych odczytanych ze strumienia bieżącego.

count
Int32

Maksymalna liczba bajtów do odczytu z bieżącego strumienia.

Zwraca

Całkowita liczba bajtów odczytanych do buforu. Może to być mniej niż liczba bajtów żądanych, jeśli liczba bajtów nie jest obecnie dostępna lub zero (0), jeśli count osiągnięto wartość 0 lub koniec strumienia.

Wyjątki

Suma offset wartości i count jest większa niż długość buforu.

buffer to null.

offset lub count jest ujemny.

Wystąpi błąd We/Wy.

Strumień nie obsługuje odczytu.

Metody były wywoływane po zamknięciu strumienia.

Przykłady

W poniższym przykładzie pokazano, jak odczytywać Read blok danych.

using namespace System;
using namespace System::IO;

public ref class Block
{
public:
    static void Main()
    {
        Stream^ s = gcnew MemoryStream();
        for (int i = 0; i < 100; i++)
        {
            s->WriteByte((Byte)i);
        }
        s->Position = 0;

        // Now read s into a byte buffer.
        array<Byte>^ bytes = gcnew array<Byte>(s->Length);
        int numBytesToRead = (int) s->Length;
        int numBytesRead = 0;
        while (numBytesToRead > 0)
        {
            // Read may return anything from 0 to 10.
            int n = s->Read(bytes, numBytesRead, 10);
            // The end of the file is reached.
            if (n == 0)
            {
                break;
            }
            numBytesRead += n;
            numBytesToRead -= n;
        }
        s->Close();
        // numBytesToRead should be 0 now, and numBytesRead should
        // equal 100.
        Console::WriteLine("number of bytes read: {0:d}", numBytesRead);
    }
};

int main()
{
    Block::Main();
}
using System;
using System.IO;

public class Block
{
    public static void Main()
    {
        Stream s = new MemoryStream();
        for (int i = 0; i < 122; i++)
        {
            s.WriteByte((byte)i);
        }
        s.Position = 0;

        // Now read s into a byte buffer with a little padding.
        byte[] bytes = new byte[s.Length + 10];
        int numBytesToRead = (int)s.Length;
        int numBytesRead = 0;
        do
        {
            // Read may return anything from 0 to 10.
            int n = s.Read(bytes, numBytesRead, 10);
            numBytesRead += n;
            numBytesToRead -= n;
        } while (numBytesToRead > 0);
        s.Close();

        Console.WriteLine("number of bytes read: {0:d}", numBytesRead);
    }
}
Imports System.IO

Public Class Block
    Public Shared Sub Main()
        Dim s As Stream = New MemoryStream()
        For i As Integer = 0 To 121
            s.WriteByte(CType(i, Byte))
        Next i
        s.Position = 0

        ' Now read s into a byte buffer that is padded slightly.
        Dim bytes(s.Length + 10) As Byte
        Dim numBytesToRead As Integer = s.Length
        Dim numBytesRead As Integer = 0
        Dim n As Integer
        Do
            ' Read may return anything from 0 to 10.
            n = s.Read(bytes, numBytesRead, 10)
            ' The end of the file is reached.
            numBytesRead += n
            numBytesToRead -= n
        Loop While numBytesToRead > 0

        s.Close()
    
        Console.WriteLine("number of bytes read: {0:d}", numBytesRead)
    End Sub
End Class

Uwagi

Użyj właściwości , CanRead aby określić, czy bieżące wystąpienie obsługuje odczytywanie. ReadAsync Użyj metody , aby odczytywać asynchronicznie z bieżącego strumienia.

Implementacje tej metody odczytują maksymalnie bajty count z bieżącego strumienia i przechowują je na buffer początku na offset. Bieżąca pozycja w strumieniu jest zaawansowana przez liczbę odczytanych bajtów; jeśli jednak wystąpi wyjątek, bieżąca pozycja w strumieniu pozostaje niezmieniona. Implementacje zwracają liczbę odczytanych bajtów. Jeśli zażądano więcej niż zero bajtów, implementacja nie zakończy operacji, dopóki nie będzie można odczytać co najmniej jednego bajtu danych (niektóre implementacje mogą podobnie nie zostać ukończone, dopóki co najmniej jeden bajt nie będzie dostępny, nawet jeśli zażądano zero bajtów, ale żadne dane nie będą używane ze strumienia w takim przypadku). Read Zwraca wartość 0 tylko wtedy, gdy zażądano zero bajtów lub gdy nie ma więcej danych w strumieniu i nie ma więcej danych (na przykład zamknięte gniazdo lub koniec pliku). Implementacja jest bezpłatna, aby zwrócić mniej bajtów niż żądano, nawet jeśli koniec strumienia nie został osiągnięty.

Służy BinaryReader do odczytywania typów danych pierwotnych.

Zobacz też

Dotyczy