Bagikan melalui


Stream.Read Metode

Definisi

Overload

Read(Span<Byte>)

Ketika ditimpa di kelas turunan, membaca urutan byte dari aliran saat ini dan memajukan posisi dalam aliran dengan jumlah byte yang dibaca.

Read(Byte[], Int32, Int32)

Ketika ditimpa di kelas turunan, membaca urutan byte dari aliran saat ini dan memajukan posisi dalam aliran dengan jumlah byte yang dibaca.

Read(Span<Byte>)

Sumber:
Stream.cs
Sumber:
Stream.cs
Sumber:
Stream.cs

Ketika ditimpa di kelas turunan, membaca urutan byte dari aliran saat ini dan memajukan posisi dalam aliran dengan jumlah byte yang dibaca.

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

Parameter

buffer
Span<Byte>

Wilayah memori. Ketika metode ini kembali, konten wilayah ini digantikan oleh byte yang dibaca dari sumber saat ini.

Mengembalikan

Jumlah total byte yang dibaca ke dalam buffer. Ini bisa kurang dari ukuran buffer jika banyak byte saat ini tidak tersedia, atau nol (0) jika panjang buffer adalah nol atau akhir aliran telah tercapai.

Keterangan

CanRead Gunakan properti untuk menentukan apakah instans saat ini mendukung pembacaan. ReadAsync Gunakan metode untuk membaca secara asinkron dari aliran saat ini.

Implementasi metode ini membaca maksimum buffer.Length byte dari aliran saat ini dan menyimpannya di buffer. Posisi saat ini dalam aliran dilanjutkan dengan jumlah byte yang dibaca; namun, jika pengecualian terjadi, posisi saat ini dalam aliran tetap tidak berubah. Implementasi mengembalikan jumlah byte yang dibaca. Jika lebih dari nol byte diminta, implementasi tidak akan menyelesaikan operasi sampai setidaknya satu byte data dapat dibaca (jika nol byte diminta, beberapa implementasi mungkin juga tidak selesai sampai setidaknya satu byte tersedia, tetapi tidak ada data yang akan digunakan dari aliran dalam kasus seperti itu). Read mengembalikan 0 hanya jika nol byte diminta atau ketika tidak ada lagi data dalam aliran dan tidak ada lagi yang diharapkan (seperti soket tertutup atau akhir file). Implementasi gratis untuk mengembalikan lebih sedikit byte daripada yang diminta meskipun akhir aliran belum tercapai.

Gunakan BinaryReader untuk membaca jenis data primitif.

Berlaku untuk

Read(Byte[], Int32, Int32)

Sumber:
Stream.cs
Sumber:
Stream.cs
Sumber:
Stream.cs

Ketika ditimpa di kelas turunan, membaca urutan byte dari aliran saat ini dan memajukan posisi dalam aliran dengan jumlah byte yang dibaca.

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

Parameter

buffer
Byte[]

Array byte. Ketika metode ini kembali, buffer berisi array byte yang ditentukan dengan nilai antara offset dan (offset + count - 1) digantikan oleh byte yang dibaca dari sumber saat ini.

offset
Int32

Offset byte berbasis nol untuk buffer mulai menyimpan data yang dibaca dari aliran saat ini.

count
Int32

Jumlah maksimum byte yang akan dibaca dari aliran saat ini.

Mengembalikan

Jumlah total byte yang dibaca ke dalam buffer. Ini bisa kurang dari jumlah byte yang diminta jika banyak byte yang saat ini tidak tersedia, atau nol (0) jika count adalah 0 atau akhir aliran telah tercapai.

Pengecualian

Jumlah offset dan count lebih besar dari panjang buffer.

bufferadalah null.

offset atau count negatif.

Terjadi kesalahan I/O.

Aliran tidak mendukung pembacaan.

Metode dipanggil setelah aliran ditutup.

Contoh

Contoh berikut menunjukkan cara menggunakan Read untuk membaca blok 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

Keterangan

CanRead Gunakan properti untuk menentukan apakah instans saat ini mendukung pembacaan. ReadAsync Gunakan metode untuk membaca secara asinkron dari aliran saat ini.

Implementasi metode ini membaca maksimum count byte dari aliran saat ini dan menyimpannya di buffer awal di offset. Posisi saat ini dalam aliran dilanjutkan dengan jumlah byte yang dibaca; namun, jika pengecualian terjadi, posisi saat ini dalam aliran tetap tidak berubah. Implementasi mengembalikan jumlah byte yang dibaca. Jika lebih dari nol byte diminta, implementasi tidak akan menyelesaikan operasi sampai setidaknya satu byte data dapat dibaca (beberapa implementasi mungkin juga tidak selesai sampai setidaknya satu byte tersedia bahkan jika nol byte diminta, tetapi tidak ada data yang akan digunakan dari aliran dalam kasus seperti itu). Read mengembalikan 0 hanya jika nol byte diminta atau ketika tidak ada lagi data dalam aliran dan tidak ada lagi yang diharapkan (seperti soket tertutup atau akhir file). Implementasi gratis untuk mengembalikan lebih sedikit byte daripada yang diminta meskipun akhir aliran belum tercapai.

Gunakan BinaryReader untuk membaca jenis data primitif.

Lihat juga

Berlaku untuk