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.

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.

Read(Span<Byte>)

Source:
Stream.cs
Source:
Stream.cs
Source:
Stream.cs

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.

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. Quando questo metodo termina, il contenuto di quest'area viene sostituito dai byte letti dall'origine corrente.

Restituisce

Numero complessivo di byte letti nel buffer. Può essere inferiore alla dimensione del buffer se il numero di byte non è attualmente disponibile oppure zero (0) se la lunghezza del buffer è zero o se è stata raggiunta la fine del flusso.

Commenti

Utilizzare la CanRead proprietà per determinare se l'istanza corrente supporta la lettura. Usare il ReadAsync metodo per leggere in modo asincrono dal flusso corrente.

Le implementazioni di questo metodo leggono un massimo di buffer.Length byte dal flusso corrente e le archivia 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. Le implementazioni restituiscono il numero di byte letti. Se vengono richiesti più byte pari a zero, l'implementazione non completerà l'operazione fino a quando non sarà possibile leggere almeno un byte di dati (se sono stati richiesti zero byte, alcune implementazioni potrebbero non essere completate fino a quando non è disponibile almeno un byte, ma nessun dato verrà utilizzato dal flusso in tal caso). Read restituisce 0 solo se sono stati richiesti zero byte o quando non sono presenti più dati nel flusso e non è più previsto (ad esempio un socket chiuso o la fine del file). Un'implementazione è libera di restituire meno byte rispetto a quanto richiesto anche se la fine del flusso non è stata raggiunta.

Usare BinaryReader per la lettura dei tipi di dati primitivi.

Si applica a

Read(Byte[], Int32, Int32)

Source:
Stream.cs
Source:
Stream.cs
Source:
Stream.cs

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.

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. 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.

offset
Int32

Offset dei byte in base zero in buffer in corrispondenza del quale iniziare l'archiviazione dei dati letti dal flusso corrente.

count
Int32

Numero massimo di byte da leggere dal flusso corrente.

Restituisce

Numero complessivo di byte letti nel buffer. Può essere minore del numero di byte richiesti se il numero di byte non è attualmente disponibile oppure zero (0) se count è 0 o la fine del flusso è stata raggiunta.

Eccezioni

La somma di offset e count è maggiore della lunghezza del buffer.

buffer è null.

offset o count è negativo.

Si è verificato un errore di I/O.

Il flusso non supporta la lettura.

Sono stati chiamati dei metodi dopo la chiusura del flusso.

Esempio

Nell'esempio seguente viene illustrato come usare Read per leggere un blocco di dati.

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. Usare il ReadAsync metodo per leggere in modo asincrono dal flusso corrente.

Le implementazioni di questo metodo leggono un massimo di count byte dal flusso corrente e le archiviano a buffer partire da 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. Le implementazioni restituiscono il numero di byte letti. Se vengono richiesti più byte pari a zero, l'implementazione non completerà l'operazione fino a quando non sarà possibile leggere almeno un byte di dati (alcune implementazioni potrebbero non essere completate in modo analogo fino a quando non è disponibile almeno un byte anche se sono stati richiesti zero byte, ma non verranno utilizzati dati dal flusso in tal caso). Read restituisce 0 solo se sono stati richiesti zero byte o quando non sono presenti più dati nel flusso e non è più previsto (ad esempio un socket chiuso o la fine del file). Un'implementazione è libera di restituire meno byte rispetto a quanto richiesto anche se la fine del flusso non è stata raggiunta.

Usare BinaryReader per la lettura dei tipi di dati primitivi.

Vedi anche

Si applica a