BufferedStream.Read Yöntem

Tanım

Aşırı Yüklemeler

Read(Span<Byte>)

Geçerli arabelleğe alınan akıştan baytları bayt aralığına kopyalar ve arabelleğe alınan akış içindeki konumu okunan bayt sayısı kadar ilerletir.

Read(Byte[], Int32, Int32)

Geçerli arabelleğe alınan akıştan bir diziye bayt kopyalar.

Read(Span<Byte>)

Kaynak:
BufferedStream.cs
Kaynak:
BufferedStream.cs
Kaynak:
BufferedStream.cs

Geçerli arabelleğe alınan akıştan baytları bayt aralığına kopyalar ve arabelleğe alınan akış içindeki konumu okunan bayt sayısı kadar ilerletir.

public:
 override int Read(Span<System::Byte> destination);
public override int Read (Span<byte> destination);
override this.Read : Span<byte> -> int
Public Overrides Function Read (destination As Span(Of Byte)) As Integer

Parametreler

destination
Span<Byte>

Bellek bölgesi. Bu yöntem döndürdüğünde, bu bölgenin içeriği geçerli kaynaktan okunan bayt ile değiştirilir.

Döndürülenler

Arabelleğe okunan toplam bayt sayısı. Bu, şu anda kullanılabilir sayıda bayt yoksa arabellekte ayrılan bayt sayısından az veya akışın sonuna ulaşıldıysa sıfır (0) olabilir.

Açıklamalar

CanRead Geçerli örneğin okumayı destekleyip desteklemediğini belirlemek için özelliğini kullanın. ReadAsync Geçerli akıştan zaman uyumsuz olarak okumak için yöntemini kullanın.

Bu yöntemin uygulamaları geçerli akıştan en fazla buffer.Length bayt sayısını okur ve içinde depolar buffer. Akış içindeki geçerli konum, okunan bayt sayısıyla gelişmiştir; ancak bir özel durum oluşursa akış içindeki geçerli konum değişmeden kalır. Uygulamalar okunan bayt sayısını döndürür. Uygulama, kullanılabilir veri olmaması durumunda en az bir bayt veri okunana kadar engeller. Read yalnızca akışta daha fazla veri olmadığında ve daha fazla veri beklenmezse (kapalı yuva veya dosya sonu gibi) 0 döndürür. Bir uygulama, akışın sonuna ulaşılmasa bile istenenden daha az bayt döndürmek için ücretsizdir.

Temel veri türlerini okumak için kullanın BinaryReader .

Şunlara uygulanır

Read(Byte[], Int32, Int32)

Kaynak:
BufferedStream.cs
Kaynak:
BufferedStream.cs
Kaynak:
BufferedStream.cs

Geçerli arabelleğe alınan akıştan bir diziye bayt kopyalar.

public:
 override int Read(cli::array <System::Byte> ^ array, int offset, int count);
public:
 override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public override int Read (byte[] array, int offset, int count);
public override int Read (byte[] buffer, int offset, int count);
override this.Read : byte[] * int * int -> int
override this.Read : byte[] * int * int -> int
Public Overrides Function Read (array As Byte(), offset As Integer, count As Integer) As Integer
Public Overrides Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer

Parametreler

arraybuffer
Byte[]

Baytların kopyalandığı arabellek.

offset
Int32

Baytların okunmaya başlandığı arabellekteki bayt uzaklığı.

count
Int32

Okunacak bayt sayısı.

Döndürülenler

içine okunan arraytoplam bayt sayısı. Bu, şu anda kullanılabilir sayıda bayt yoksa istenen bayt sayısından az veya herhangi bir veri okunmadan önce akışın sonuna ulaşıldıysa 0 olabilir.

Özel durumlar

Eksi offset uzunluğu değerinden arraycountküçük.

array, null değeridir.

offset veya count negatiftir.

Akış açık değil veya şeklindedir null.

Akış okumayı desteklemiyor.

Akış kapatıldıktan sonra yöntemler çağrıldı.

Örnekler

Bu kod örneği, sınıfı için BufferedStream sağlanan daha büyük bir örneğin parçasıdır.

// Receive data using the BufferedStream.
Console::WriteLine(  "Receiving data using BufferedStream." );
bytesReceived = 0;
startTime = DateTime::Now;
while ( bytesReceived < numberOfLoops * receivedData->Length )
{
   bytesReceived += bufStream->Read( receivedData, 0, receivedData->Length );
}

bufferedTime = (DateTime::Now - startTime).TotalSeconds;
Console::WriteLine( "{0} bytes received in {1} seconds.\n", bytesReceived.ToString(), bufferedTime.ToString(  "F1" ) );
// Receive data using the BufferedStream.
Console.WriteLine("Receiving data using BufferedStream.");
bytesReceived = 0;
startTime = DateTime.Now;

int numBytesToRead = receivedData.Length;

while (numBytesToRead > 0)
{
    // Read may return anything from 0 to numBytesToRead.
    int n = bufStream.Read(receivedData,0, receivedData.Length);
    // The end of the file is reached.
    if (n == 0)
        break;
    bytesReceived += n;
    numBytesToRead -= n;
}

bufferedTime = (DateTime.Now - startTime).TotalSeconds;
Console.WriteLine("{0} bytes received in {1} seconds.\n",
    bytesReceived.ToString(),
    bufferedTime.ToString("F1"));
// Receive data using the BufferedStream.
printfn "Receiving data using BufferedStream."
bytesReceived <- 0
let startTime = DateTime.Now

let mutable numBytesToRead = receivedData.Length

let mutable broken = false
while not broken && numBytesToRead > 0 do
    // Read may return anything from 0 to numBytesToRead.
    let n = bufStream.Read(receivedData,0, receivedData.Length)
    // The end of the file is reached.
    if n = 0 then
        broken <- true
    else
        bytesReceived <- bytesReceived + n
        numBytesToRead <- numBytesToRead - n

let bufferedTime = (DateTime.Now - startTime).TotalSeconds
printfn $"{bytesReceived} bytes received in {bufferedTime:F1} seconds.\n"
' Receive data using the BufferedStream.
Console.WriteLine("Receiving data using BufferedStream.")
bytesReceived = 0
startTime = DateTime.Now

Dim numBytesToRead As Integer = receivedData.Length
Dim n As Integer
Do While numBytesToRead > 0

    'Read my return anything from 0 to numBytesToRead
    n = bufStream.Read(receivedData, 0, receivedData.Length)
    'The end of the file is reached.
    If n = 0 Then
        Exit Do
    End If

    bytesReceived += n
    numBytesToRead -= n
Loop

bufferedTime = DateTime.Now.Subtract(startTime).TotalSeconds
Console.WriteLine("{0} bytes received in {1} " & _
    "seconds." & vbCrLf, _
    bytesReceived.ToString(), _
    bufferedTime.ToString("F1"))

Açıklamalar

Read yöntemi yalnızca akışın sonuna ulaşılırsa 0 döndürür. Diğer tüm durumlarda, Read geri dönmeden önce her zaman akıştan en az bir bayt okur. Tanımı gereği, çağrısı ReadRead üzerine akıştan kullanılabilir veri yoksa yöntemi 0 döndürür (akışın sonuna otomatik olarak ulaşılır). Bir uygulama, akışın sonuna ulaşılmasa bile istenenden daha az bayt döndürmek için ücretsizdir.

Temel veri türlerini okumak için kullanın BinaryReader .

Ayrıca bkz.

Şunlara uygulanır