Stream.Read メソッド

定義

オーバーロード

Read(Span<Byte>)

派生クラスによってオーバーライドされた場合は、現在のストリームからバイト シーケンスを読み取り、読み取ったバイト数の分だけストリームの位置を進めます。

Read(Byte[], Int32, Int32)

派生クラスによってオーバーライドされた場合は、現在のストリームからバイト シーケンスを読み取り、読み取ったバイト数の分だけストリームの位置を進めます。

Read(Span<Byte>)

派生クラスによってオーバーライドされた場合は、現在のストリームからバイト シーケンスを読み取り、読み取ったバイト数の分だけストリームの位置を進めます。

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

パラメーター

buffer
Span<Byte>

メモリの領域。 このメソッドが戻ると、この領域のコンテンツは現在のソースから読み取られたバイトに置き換えられます。

戻り値

バッファーに読み取られた合計バイト数。 現在使用できないバイト数が多い場合はバッファーのサイズより小さく、バッファーの長さが 0 またはストリームの末尾に達した場合は 0 を指定できます。

注釈

プロパティを使用して、 CanRead 現在のインスタンスが読み取りをサポートしているかどうかを判断します。 メソッドを ReadAsync 使用して、現在のストリームから非同期的に読み取ります。

このメソッドの実装では、現在の buffer.Length ストリームから最大バイト数を読み取り、 に buffer格納します。 ストリーム内の現在の位置は、読み取られたバイト数だけ進みます。ただし、例外が発生した場合、ストリーム内の現在の位置は変更されません。 実装は、読み取られたバイト数を返します。 0 バイトを超えるバイトが要求された場合、実装は、少なくとも 1 バイトのデータを読み取ることができるまで操作を完了しません (0 バイトが要求された場合、少なくとも 1 バイトが使用可能になるまで、一部の実装も同様に完了しない場合がありますが、このような場合はストリームからデータは消費されません)。 Read は、0 バイトが要求された場合、またはストリームにそれ以上データがなく、それ以上必要ない場合 (閉じられたソケットやファイルの末尾など) にのみ 0 を返します。 実装では、ストリームの末尾に達していない場合でも、要求されたバイト数よりも少ないバイト数を自由に返します。

プリミティブ データ型を読み取る場合に 使用 BinaryReader します。

適用対象

Read(Byte[], Int32, Int32)

派生クラスによってオーバーライドされた場合は、現在のストリームからバイト シーケンスを読み取り、読み取ったバイト数の分だけストリームの位置を進めます。

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 内のバイト オフセット。インデックス番号は 0 から始まります。

count
Int32

現在のストリームから読み取る最大バイト数。

戻り値

バッファーに読み取られた合計バイト数。 現在使用できないバイト数が多い場合は要求されたバイト数より小さく、が 0 またはストリームの末尾に達した場合 count はゼロ (0) にすることができます。

例外

offsetcount の合計が、バッファーの長さよりも大きいです。

buffernullです。

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格納します。 ストリーム内の現在の位置は、読み取られたバイト数だけ進みます。ただし、例外が発生した場合、ストリーム内の現在の位置は変更されません。 実装は、読み取られたバイト数を返します。 0 バイトを超えるバイトが要求された場合、実装は、少なくとも 1 バイトのデータを読み取ることができるまで操作を完了しません (0 バイトが要求された場合でも少なくとも 1 バイトが使用可能になるまで、一部の実装も同様に完了しない場合がありますが、このような場合はストリームからデータは使用されません)。 Read は、0 バイトが要求された場合、またはストリームにそれ以上データがなく、それ以上必要ない場合 (閉じられたソケットやファイルの末尾など) にのみ 0 を返します。 実装では、ストリームの末尾に達していない場合でも、要求されたバイト数よりも少ないバイト数を自由に返します。

プリミティブ データ型を読み取る場合に 使用 BinaryReader します。

こちらもご覧ください

適用対象