Stream.Read Metodo

Definizione

Overload

Read(Span<Byte>)

Quando ne viene eseguito l'override in una classe derivata, legge una sequenza di byte dal flusso corrente e passa alla posizione successiva all'interno del flusso corrente in base al numero di byte letti.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)

Quando ne viene eseguito l'override in una classe derivata, legge una sequenza di byte dal flusso corrente e passa alla posizione successiva all'interno del flusso corrente in base al numero di byte letti.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>)

Quando ne viene eseguito l'override in una classe derivata, legge una sequenza di byte dal flusso corrente e passa alla posizione successiva all'interno del flusso corrente in base al numero di byte letti.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

Parametri

buffer
Span<Byte>

Un'area di memoria.A region of memory. Quando questo metodo termina, il contenuto di quest'area viene sostituito dai byte letti dall'origine corrente.When this method returns, the contents of this region are replaced by the bytes read from the current source.

Restituisce

Int32

Numero complessivo di byte letti nel buffer.The total number of bytes read into the buffer. È possibile che questo numero sia inferiore a quello dei byte allocati nel buffer se la quantità di byte disponibili è minore oppure che corrisponda a zero (0) se è stata raggiunta la fine del flusso.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.

Commenti

Utilizzare la CanRead proprietà per determinare se l'istanza corrente supporta la lettura.Use the CanRead property to determine whether the current instance supports reading. Usare il ReadAsync metodo per leggere in modo asincrono dal flusso corrente.Use the ReadAsync method to read asynchronously from the current stream.

Le implementazioni di questo metodo leggono un massimo di buffer.Length byte dal flusso corrente e li archiviano in buffer .Implementations of this method read a maximum of buffer.Length bytes from the current stream and store them in buffer. La posizione corrente all'interno del flusso è avanzata dal numero di byte letti; Tuttavia, se si verifica un'eccezione, la posizione corrente all'interno del flusso rimane invariata.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. Le implementazioni restituiscono il numero di byte letti.Implementations return the number of bytes read. L'implementazione si bloccherà fino a quando non sarà possibile leggere almeno un byte di dati, nel caso in cui non siano disponibili dati.The implementation will block until at least one byte of data can be read, in the event that no data is available. Read restituisce 0 solo quando non sono presenti altri dati nel flusso e non è previsto altro, ad esempio un socket chiuso o una fine del file.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). Un'implementazione può restituire un numero minore di byte rispetto a quelli richiesti anche se non è stata raggiunta la fine del flusso.An implementation is free to return fewer bytes than requested even if the end of the stream has not been reached.

Utilizzare BinaryReader per la lettura di tipi di dati primitivi.Use BinaryReader for reading primitive data types.

Si applica a

Read(Byte[], Int32, Int32)

Quando ne viene eseguito l'override in una classe derivata, legge una sequenza di byte dal flusso corrente e passa alla posizione successiva all'interno del flusso corrente in base al numero di byte letti.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

Parametri

buffer
Byte[]

Matrice di byte.An array of bytes. Quando questo metodo viene restituito, il buffer contiene la matrice di byte specificata con i valori compresi tra offset e (offset + count - 1) sostituiti con i byte letti dall'origine corrente.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

Offset dei byte in base zero in buffer in corrispondenza del quale iniziare l'archiviazione dei dati letti dal flusso corrente.The zero-based byte offset in buffer at which to begin storing the data read from the current stream.

count
Int32

Numero massimo di byte da leggere dal flusso corrente.The maximum number of bytes to be read from the current stream.

Restituisce

Int32

Numero complessivo di byte letti nel buffer.The total number of bytes read into the buffer. È possibile che questo numero sia inferiore a quello dei byte richiesti se la quantità di byte disponibili è minore oppure che corrisponda a zero (0) se è stata raggiunta la fine del flusso.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.

Eccezioni

La somma di offset e count è maggiore della lunghezza del buffer.The sum of offset and count is larger than the buffer length.

buffer è null.buffer is null.

offset o count è negativo.offset or count is negative.

Si è verificato un errore di I/O.An I/O error occurs.

Il flusso non supporta la lettura.The stream does not support reading.

Sono stati chiamati dei metodi dopo la chiusura del flusso.Methods were called after the stream was closed.

Esempio

Nell'esempio seguente viene illustrato come utilizzare Read per leggere un blocco di dati.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

Commenti

Utilizzare la CanRead proprietà per determinare se l'istanza corrente supporta la lettura.Use the CanRead property to determine whether the current instance supports reading. Usare il ReadAsync metodo per leggere in modo asincrono dal flusso corrente.Use the ReadAsync method to read asynchronously from the current stream.

Le implementazioni di questo metodo leggono un massimo di count byte dal flusso corrente e li archiviano in a buffer partire da offset .Implementations of this method read a maximum of count bytes from the current stream and store them in buffer beginning at offset. La posizione corrente all'interno del flusso è avanzata dal numero di byte letti; Tuttavia, se si verifica un'eccezione, la posizione corrente all'interno del flusso rimane invariata.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. Le implementazioni restituiscono il numero di byte letti.Implementations return the number of bytes read. L'implementazione si bloccherà fino a quando non sarà possibile leggere almeno un byte di dati, nel caso in cui non siano disponibili dati.The implementation will block until at least one byte of data can be read, in the event that no data is available. Read restituisce 0 solo quando non sono presenti altri dati nel flusso e non è previsto altro, ad esempio un socket chiuso o una fine del file.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). Un'implementazione può restituire un numero minore di byte rispetto a quelli richiesti anche se non è stata raggiunta la fine del flusso.An implementation is free to return fewer bytes than requested even if the end of the stream has not been reached.

Utilizzare BinaryReader per la lettura di tipi di dati primitivi.Use BinaryReader for reading primitive data types.

Vedi anche

Si applica a