Udostępnij za pośrednictwem


BufferedStream.Read Metoda

Definicja

Przeciążenia

Read(Span<Byte>)

Kopiuje bajty z bieżącego buforowanego strumienia do zakresu bajtów i przesuwa pozycję w buforowanych strumieniach przez liczbę odczytanych bajtów.

Read(Byte[], Int32, Int32)

Kopiuje bajty z bieżącego buforowanego strumienia do tablicy.

Read(Span<Byte>)

Źródło:
BufferedStream.cs
Źródło:
BufferedStream.cs
Źródło:
BufferedStream.cs

Kopiuje bajty z bieżącego buforowanego strumienia do zakresu bajtów i przesuwa pozycję w buforowanych strumieniach przez liczbę odczytanych bajtów.

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

Parametry

destination
Span<Byte>

Region pamięci. Gdy ta metoda zwróci wartość , zawartość tego regionu jest zastępowana przez bajty odczytane z bieżącego źródła.

Zwraca

Całkowita liczba bajtów odczytanych do buforu. Może to być mniejsza niż liczba bajtów przydzielonych w buforze, jeśli liczba bajtów nie jest obecnie dostępna lub zero (0), jeśli koniec strumienia został osiągnięty.

Uwagi

Użyj właściwości , CanRead aby określić, czy bieżące wystąpienie obsługuje odczyt. ReadAsync Użyj metody , aby odczytywać asynchronicznie z bieżącego strumienia.

Implementacje tej metody odczytują maksymalnie buffer.Length bajty z bieżącego strumienia i przechowują je w .buffer Bieżące położenie w strumieniu jest zaawansowane przez liczbę odczytanych bajtów; jednak w przypadku wystąpienia wyjątku bieżące położenie w strumieniu pozostaje niezmienione. Implementacje zwracają liczbę odczytanych bajtów. Implementacja zostanie zablokowana do momentu odczytania co najmniej jednego bajtu danych w przypadku, gdy żadne dane nie są dostępne. Read Metoda zwraca wartość 0 tylko wtedy, gdy nie ma więcej danych w strumieniu i nie oczekuje się więcej (np. zamkniętego gniazda lub końca pliku). Implementacja może zwracać mniej bajtów niż zażądano, nawet jeśli koniec strumienia nie został osiągnięty.

Służy BinaryReader do odczytywania typów danych pierwotnych.

Dotyczy

Read(Byte[], Int32, Int32)

Źródło:
BufferedStream.cs
Źródło:
BufferedStream.cs
Źródło:
BufferedStream.cs

Kopiuje bajty z bieżącego buforowanego strumienia do tablicy.

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

Parametry

arraybuffer
Byte[]

Bufor, do którego mają zostać skopiowane bajty.

offset
Int32

Przesunięcie bajtu w buforze, w którym należy rozpocząć odczytywanie bajtów.

count
Int32

Liczba bajtów do odczytania.

Zwraca

Całkowita liczba bajtów odczytanych do elementu array. Może to być mniejsze niż liczba bajtów żądanych, jeśli liczba bajtów nie jest obecnie dostępna, lub 0, jeśli koniec strumienia został osiągnięty, zanim będzie można odczytać jakiekolwiek dane.

Wyjątki

array Długość minus offset jest mniejsza niż count.

array to null.

offset lub count jest ujemny.

Strumień nie jest otwarty lub ma wartość null.

Strumień nie obsługuje odczytu.

Metody zostały wywołane po zamknięciu strumienia.

Przykłady

Ten przykład kodu jest częścią większego przykładu udostępnionego BufferedStream dla klasy .

// 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"))

Uwagi

Metoda Read zwróci wartość 0 tylko wtedy, gdy osiągnięto koniec strumienia. We wszystkich innych przypadkach Read zawsze odczytuje co najmniej jeden bajt ze strumienia przed zwróceniem. Z definicji, jeśli żadne dane ze strumienia nie są dostępne po wywołaniu metody Read, Read metoda zwraca wartość 0 (koniec strumienia jest osiągany automatycznie). Implementacja może zwracać mniej bajtów niż zażądano, nawet jeśli koniec strumienia nie został osiągnięty.

Służy BinaryReader do odczytywania typów danych pierwotnych.

Zobacz też

Dotyczy