Stream.Read Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Przeciążenia
Read(Span<Byte>) |
Po zastąpieniu w klasie pochodnej odczytuje sekwencję bajtów z bieżącego strumienia i przesuwa pozycję w strumieniu przez liczbę odczytanych bajtów. |
Read(Byte[], Int32, Int32) |
Po zastąpieniu w klasie pochodnej odczytuje sekwencję bajtów z bieżącego strumienia i przesuwa pozycję w strumieniu przez liczbę odczytanych bajtów. |
Read(Span<Byte>)
- Źródło:
- Stream.cs
- Źródło:
- Stream.cs
- Źródło:
- Stream.cs
Po zastąpieniu w klasie pochodnej odczytuje sekwencję bajtów z bieżącego strumienia i przesuwa pozycję w strumieniu przez liczbę odczytanych bajtów.
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
Parametry
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ć mniejsze niż rozmiar buforu, jeśli wiele bajtów nie jest obecnie dostępnych, lub zero (0), jeśli długość buforu wynosi zero lub osiągnięto koniec strumienia.
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. Jeśli zażądano więcej niż zero bajtów, implementacja nie zakończy operacji, dopóki nie będzie można odczytać co najmniej jednego bajtu danych (jeśli zażądano zero bajtów, niektóre implementacje mogą być podobnie nie ukończone, dopóki co najmniej jeden bajt nie będzie dostępny, ale żadne dane nie będą używane ze strumienia w takim przypadku). Read Zwraca wartość 0 tylko wtedy, gdy zażądano zero bajtów lub 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:
- Stream.cs
- Źródło:
- Stream.cs
- Źródło:
- Stream.cs
Po zastąpieniu w klasie pochodnej odczytuje sekwencję bajtów z bieżącego strumienia i przesuwa pozycję w strumieniu przez liczbę odczytanych bajtów.
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
Parametry
- buffer
- Byte[]
Tablica bajtów. Gdy ta metoda zwraca, bufor zawiera określoną tablicę bajtów z wartościami między offset
i (offset
+ count
- 1) zastąpionymi bajtami odczytanymi z bieżącego źródła.
- offset
- Int32
Przesunięcie bajtów na podstawie zera, w buffer
którym należy rozpocząć przechowywanie danych odczytanych z bieżącego strumienia.
- count
- Int32
Maksymalna liczba bajtów do odczytania z bieżącego strumienia.
Zwraca
Całkowita liczba bajtów odczytanych do buforu. Może to być mniejsza niż liczba bajtów żądanych, jeśli liczba bajtów nie jest obecnie dostępna, lub zero (0), jeśli count
wartość to 0 lub osiągnięto koniec strumienia.
Wyjątki
Suma offset
wartości i count
jest większa niż długość buforu.
buffer
to null
.
offset
lub count
jest ujemny.
Wystąpi błąd We/Wy.
Strumień nie obsługuje odczytu.
Metody zostały wywołane po zamknięciu strumienia.
Przykłady
W poniższym przykładzie pokazano, jak odczytywać blok danych przy użyciu Read polecenia .
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
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 bajty count
z bieżącego strumienia i przechowują je na buffer
początku na .offset
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. Jeśli zażąda się więcej niż zero bajtów, implementacja nie zakończy operacji, dopóki nie będzie można odczytać co najmniej jednego bajtu danych (niektóre implementacje mogą podobnie nie zostać ukończone, dopóki co najmniej jeden bajt nie będzie dostępny, nawet jeśli zażądano zero bajtów, ale żadne dane nie zostaną zużyte ze strumienia w takim przypadku). Read Zwraca wartość 0 tylko wtedy, gdy zażądano zero bajtów lub 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.
Zobacz też
- We/wy plików i Stream
- Instrukcje: Odczytywanie tekstu z pliku
- Instrukcje: Zapisywanie tekstu w pliku