Stream.Read 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
Read(Span<Byte>) |
當在衍生類別中覆寫時,自目前資料流讀取一連串的位元組,並依所讀取的位元組數目進階資料流中的位置。 |
Read(Byte[], Int32, Int32) |
當在衍生類別中覆寫時,自目前資料流讀取一連串的位元組,並依所讀取的位元組數目進階資料流中的位置。 |
Read(Span<Byte>)
- 來源:
- Stream.cs
- 來源:
- Stream.cs
- 來源:
- Stream.cs
當在衍生類別中覆寫時,自目前資料流讀取一連串的位元組,並依所讀取的位元組數目進階資料流中的位置。
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
參數
傳回
緩衝區所讀取的總位元組數。 如果目前無法使用許多位元組,則這可以小於緩衝區的大小,如果緩衝區的長度為零或已到達數據流結尾,則為零 (0) 。
備註
CanRead使用屬性來判斷目前實例是否支援讀取。 ReadAsync使用方法,以異步方式從目前的數據流讀取。
這個方法的實作會讀取目前數據流的最大位元元組數 buffer.Length
,並將其儲存在 buffer
中。 數據流中的目前位置會依讀取的位元元組數目進階;不過,如果發生例外狀況,數據流內的目前位置會保持不變。 實作會傳回讀取的位元組數目。 如果要求超過零個字節,除非至少可以 (讀取一個字節的數據,否則實作將不會完成作業,如果要求零個字節,則某些實作在至少有一個字節可用之前可能尚未完成,但在這種情況下,不會從數據流取用任何數據) 。 Read 只有在要求零個字節或數據流中沒有其他數據時,才會傳回0,而且不會再傳回任何 (,例如封閉式套接字或檔案結尾) 。 即使尚未到達數據流結尾,實作仍可傳回比要求較少的位元組。
用於 BinaryReader 讀取基本數據類型。
適用於
Read(Byte[], Int32, Int32)
- 來源:
- Stream.cs
- 來源:
- Stream.cs
- 來源:
- Stream.cs
當在衍生類別中覆寫時,自目前資料流讀取一連串的位元組,並依所讀取的位元組數目進階資料流中的位置。
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
參數
- buffer
- Byte[]
位元組陣列。 當這個方法傳回時,緩衝區會包含指定的位元組陣列,這個陣列具有介於 offset
到 (offset
+ count
- 1) 之間的值,已由讀取自目前來源的位元組所取代。
- offset
- Int32
buffer
中以零起始的位元組位移,即開始儲存讀取自目前資料流之資料的位置。
- count
- Int32
自目前資料流讀取的最大位元組數。
傳回
緩衝區所讀取的總位元組數。 如果目前無法使用許多位元組,則這可以小於要求的位元元組數目,如果 count
為0或已到達數據流結尾,則為零 (0) 。
例外狀況
offset
和 count
的總和大於緩衝區長度。
buffer
為 null
。
offset
或 count
為負。
發生 I/O 錯誤。
資料流不支援讀取。
關閉資料流後呼叫了方法。
範例
下列範例示範如何使用 Read 來讀取數據區塊。
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
備註
CanRead使用屬性來判斷目前實例是否支援讀取。 ReadAsync使用方法,以異步方式從目前的數據流讀取。
這個方法的實作會從目前的數據流讀取最多位元組,count
並從 開始offset
儲存它們buffer
。 數據流中的目前位置會依讀取的位元元組數目進階;不過,如果發生例外狀況,數據流內的目前位置會保持不變。 實作會傳回讀取的位元組數目。 如果要求超過零個字節,則除非至少可以讀取一個字節的數據,否則實作不會完成作業, (某些實作在至少一個字節可用之前,即使要求零個字節,但在這種情況下,不會從數據流取用任何數據) 。 Read 只有在要求零個字節或數據流中沒有其他數據時,才會傳回0,而且不會再傳回任何 (,例如封閉式套接字或檔案結尾) 。 即使尚未到達數據流結尾,實作仍可傳回比要求較少的位元組。
用於 BinaryReader 讀取基本數據類型。