Condividi tramite


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

Origine:
Stream.cs
Origine:
Stream.cs
Origine:
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. Ciò può essere minore delle dimensioni del buffer se tale numero di byte non è attualmente disponibile o zero (0) se la lunghezza del buffer è zero o la fine del flusso è stata raggiunta.

Commenti

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

Le implementazioni di questo metodo leggevano un massimo di buffer.Length byte dal flusso corrente e le archiviavano 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 sono richiesti più di zero byte, l'implementazione non completa l'operazione fino a quando non è possibile leggere almeno un byte di dati (se sono stati richiesti zero byte, alcune implementazioni potrebbero non completare in modo analogo fino a quando non è disponibile almeno un byte, ma non verranno usati 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 una fine di file). Un'implementazione è gratuita per restituire meno byte rispetto alla richiesta 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)

Origine:
Stream.cs
Origine:
Stream.cs
Origine:
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. Ciò può essere minore del numero di byte richiesti se tale numero di byte non è attualmente disponibile o 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 proprietà per determinare se l'istanza CanRead corrente supporta la lettura. Usare il ReadAsync metodo per leggere in modo asincrono dal flusso corrente.

Le implementazioni di questo metodo leggevano un massimo di count byte dal flusso corrente e le archiviavano a partire da bufferoffset. 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 sono richiesti più di zero byte, l'implementazione non completa l'operazione fino a quando non è 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 usati 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 una fine di file). Un'implementazione è gratuita per restituire meno byte rispetto alla richiesta anche se la fine del flusso non è stata raggiunta.

Usare BinaryReader per la lettura dei tipi di dati primitivi.

Vedi anche

Si applica a