閱讀英文

共用方式為


Stream.Read 方法

定義

多載

Read(Span<Byte>)

當在衍生類別中覆寫時,自目前資料流讀取一連串的位元組,並依所讀取的位元組數目進階資料流中的位置。

Read(Byte[], Int32, Int32)

當在衍生類別中覆寫時,自目前資料流讀取一連串的位元組,並依所讀取的位元組數目進階資料流中的位置。

Read(Span<Byte>)

來源:
Stream.cs
來源:
Stream.cs
來源:
Stream.cs

當在衍生類別中覆寫時,自目前資料流讀取一連串的位元組,並依所讀取的位元組數目進階資料流中的位置。

C#
public virtual int Read (Span<byte> buffer);

參數

buffer
Span<Byte>

記憶體區域。 當這個方法傳回時,讀取自目前來源的位元組會取代此區域內容。

傳回

緩衝區所讀取的總位元組數。 如果目前無法使用許多位元組,則這可以小於緩衝區的大小,如果緩衝區的長度為零或已到達數據流結尾,則為零 (0) 。

備註

CanRead使用屬性來判斷目前實例是否支援讀取。 ReadAsync使用方法,以異步方式從目前的數據流讀取。

這個方法的實作會讀取目前數據流的最大位元元組數 buffer.Length ,並將其儲存在 buffer中。 數據流中的目前位置會依讀取的位元元組數目進階;不過,如果發生例外狀況,數據流內的目前位置會保持不變。 實作會傳回讀取的位元組數目。 如果要求超過零個字節,除非至少可以 (讀取一個字節的數據,否則實作將不會完成作業,如果要求零個字節,則某些實作在至少有一個字節可用之前可能尚未完成,但在這種情況下,不會從數據流取用任何數據) 。 Read 只有在要求零個字節或數據流中沒有其他數據時,才會傳回0,而且不會再傳回任何 (,例如封閉式套接字或檔案結尾) 。 即使尚未到達數據流結尾,實作仍可傳回比要求較少的位元組。

用於 BinaryReader 讀取基本數據類型。

適用於

.NET 9 及其他版本
產品 版本
.NET Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

Read(Byte[], Int32, Int32)

來源:
Stream.cs
來源:
Stream.cs
來源:
Stream.cs

當在衍生類別中覆寫時,自目前資料流讀取一連串的位元組,並依所讀取的位元組數目進階資料流中的位置。

C#
public abstract int Read (byte[] buffer, int offset, int count);

參數

buffer
Byte[]

位元組陣列。 當這個方法傳回時,緩衝區會包含指定的位元組陣列,這個陣列具有介於 offset 到 (offset + count - 1) 之間的值,已由讀取自目前來源的位元組所取代。

offset
Int32

buffer 中以零起始的位元組位移,即開始儲存讀取自目前資料流之資料的位置。

count
Int32

自目前資料流讀取的最大位元組數。

傳回

緩衝區所讀取的總位元組數。 如果目前無法使用許多位元組,則這可以小於要求的位元元組數目,如果 count 為0或已到達數據流結尾,則為零 (0) 。

例外狀況

offsetcount 的總和大於緩衝區長度。

buffernull

offsetcount 為負。

發生 I/O 錯誤。

資料流不支援讀取。

關閉資料流後呼叫了方法。

範例

下列範例示範如何使用 Read 來讀取數據區塊。

C#
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);
    }
}

備註

CanRead使用屬性來判斷目前實例是否支援讀取。 ReadAsync使用方法,以異步方式從目前的數據流讀取。

這個方法的實作會從目前的數據流讀取最多位元組,count並從 開始offset儲存它們buffer。 數據流中的目前位置會依讀取的位元元組數目進階;不過,如果發生例外狀況,數據流內的目前位置會保持不變。 實作會傳回讀取的位元組數目。 如果要求超過零個字節,則除非至少可以讀取一個字節的數據,否則實作不會完成作業, (某些實作在至少一個字節可用之前,即使要求零個字節,但在這種情況下,不會從數據流取用任何數據) 。 Read 只有在要求零個字節或數據流中沒有其他數據時,才會傳回0,而且不會再傳回任何 (,例如封閉式套接字或檔案結尾) 。 即使尚未到達數據流結尾,實作仍可傳回比要求較少的位元組。

用於 BinaryReader 讀取基本數據類型。

另請參閱

適用於

.NET 9 及其他版本
產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0