Stream.Read Metoda

Definicja

Przeciążenia

Read(Span<Byte>)

Gdy jest zastępowany w klasie pochodnej, odczytuje sekwencję bajtów z bieżącego strumienia i przesuwa pozycję w strumieniu o liczbę odczytanych bajtów.When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

Read(Byte[], Int32, Int32)

Gdy jest zastępowany w klasie pochodnej, odczytuje sekwencję bajtów z bieżącego strumienia i przesuwa pozycję w strumieniu o liczbę odczytanych bajtów.When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

Read(Span<Byte>)

Gdy jest zastępowany w klasie pochodnej, odczytuje sekwencję bajtów z bieżącego strumienia i przesuwa pozycję w strumieniu o liczbę odczytanych bajtów.When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

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.A region of memory. Gdy ta metoda zwraca, zawartość tego regionu jest zastępowana przez Bajty odczytane z bieżącego źródła.When this method returns, the contents of this region are replaced by the bytes read from the current source.

Zwraca

Int32

Całkowita liczba bajtów odczytywanych w buforze.The total number of bytes read into the buffer. Wartość ta może być mniejsza niż liczba bajtów przypadających w buforze, jeśli wiele bajtów nie jest obecnie dostępna lub zero (0), jeśli osiągnięto koniec strumienia.This can be less than the number of bytes allocated in the buffer if that many bytes are not currently available, or zero (0) if the end of the stream has been reached.

Uwagi

Użyj CanRead właściwości, aby określić, czy bieżące wystąpienie obsługuje odczytywanie.Use the CanRead property to determine whether the current instance supports reading. Użyj ReadAsync metody, aby odczytywać asynchronicznie z bieżącego strumienia.Use the ReadAsync method to read asynchronously from the current stream.

Implementacje tej metody odczytują maksymalnie buffer.Length bajtów z bieżącego strumienia i przechowują je w buffer .Implementations of this method read a maximum of buffer.Length bytes from the current stream and store them in 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.The current position within the stream is advanced by the number of bytes read; however, if an exception occurs, the current position within the stream remains unchanged. Implementacje zwracają liczbę odczytanych bajtów.Implementations return the number of bytes read. Implementacja zostanie Zablokowani do momentu odczytania co najmniej jednego bajtu danych, w przypadku, gdy żadne dane nie są dostępne.The implementation will block until at least one byte of data can be read, in the event that no data is available. Read Zwraca wartość 0 tylko wtedy, gdy nie ma więcej danych w strumieniu i nie ma więcej oczekiwanych (takich jak zamknięte gniazdo lub koniec pliku).Read returns 0 only when there is no more data in the stream and no more is expected (such as a closed socket or end of file). Implementacja może zwrócić mniejszą liczbę bajtów niż żądana, nawet jeśli koniec strumienia nie został osiągnięty.An implementation is free to return fewer bytes than requested even if the end of the stream has not been reached.

Służy BinaryReader do odczytywania typów danych pierwotnych.Use BinaryReader for reading primitive data types.

Dotyczy

Read(Byte[], Int32, Int32)

Gdy jest zastępowany w klasie pochodnej, odczytuje sekwencję bajtów z bieżącego strumienia i przesuwa pozycję w strumieniu o liczbę odczytanych bajtów.When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

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.An array of bytes. Gdy ta metoda zwraca, bufor zawiera określoną tablicę bajtową z wartościami między offset i ( offset + count -1) zastąpione przez Bajty odczytane z bieżącego źródła.When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count - 1) replaced by the bytes read from the current source.

offset
Int32

Przesunięcie bajtu (liczony od zera), w buffer którym rozpocznie się przechowywanie danych odczytanych z bieżącego strumienia.The zero-based byte offset in buffer at which to begin storing the data read from the current stream.

count
Int32

Maksymalna liczba bajtów, które mają być odczytane z bieżącego strumienia.The maximum number of bytes to be read from the current stream.

Zwraca

Int32

Całkowita liczba bajtów odczytywanych w buforze.The total number of bytes read into the buffer. Wartość ta może być mniejsza niż liczba bajtów żądana, jeśli nie jest ona obecnie dostępna, lub zero (0), jeśli osiągnięto koniec strumienia.This can be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached.

Wyjątki

Suma offset i count jest większa niż długość buforu.The sum of offset and count is larger than the buffer length.

buffer to null.buffer is null.

offset lub count jest ujemna.offset or count is negative.

Wystąpi błąd We/Wy.An I/O error occurs.

Strumień nie obsługuje odczytywania.The stream does not support reading.

Metody zostały wywołane po zamknięciu strumienia.Methods were called after the stream was closed.

Przykłady

Poniższy przykład pokazuje, jak używać Read do odczytywania bloku danych.The following example shows how to use Read to read a block of data.

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 CanRead właściwości, aby określić, czy bieżące wystąpienie obsługuje odczytywanie.Use the CanRead property to determine whether the current instance supports reading. Użyj ReadAsync metody, aby odczytywać asynchronicznie z bieżącego strumienia.Use the ReadAsync method to read asynchronously from the current stream.

Implementacje tej metody odczytują maksymalnie count bajtów z bieżącego strumienia i przechowują je w buffer czasie od offset .Implementations of this method read a maximum of count bytes from the current stream and store them in buffer beginning at 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.The current position within the stream is advanced by the number of bytes read; however, if an exception occurs, the current position within the stream remains unchanged. Implementacje zwracają liczbę odczytanych bajtów.Implementations return the number of bytes read. Implementacja zostanie Zablokowani do momentu odczytania co najmniej jednego bajtu danych, w przypadku, gdy żadne dane nie są dostępne.The implementation will block until at least one byte of data can be read, in the event that no data is available. Read Zwraca wartość 0 tylko wtedy, gdy nie ma więcej danych w strumieniu i nie ma więcej oczekiwanych (takich jak zamknięte gniazdo lub koniec pliku).Read returns 0 only when there is no more data in the stream and no more is expected (such as a closed socket or end of file). Implementacja może zwrócić mniejszą liczbę bajtów niż żądana, nawet jeśli koniec strumienia nie został osiągnięty.An implementation is free to return fewer bytes than requested even if the end of the stream has not been reached.

Służy BinaryReader do odczytywania typów danych pierwotnych.Use BinaryReader for reading primitive data types.

Dotyczy