BufferedStream.Read Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
Read(Span<Byte>) |
Копирует байты из текущего буферизованного потока в диапазон байтов и перемещает позицию в буферизованном потоке вперед на количество прочитанных байтов. |
Read(Byte[], Int32, Int32) |
Копирует байты из текущего буферизованного потока в массив. |
Read(Span<Byte>)
- Исходный код:
- BufferedStream.cs
- Исходный код:
- BufferedStream.cs
- Исходный код:
- BufferedStream.cs
Копирует байты из текущего буферизованного потока в диапазон байтов и перемещает позицию в буферизованном потоке вперед на количество прочитанных байтов.
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
Параметры
Область памяти. При возвращении данного метода содержимое этой области заменяется байтами, считанными из текущего источника.
Возвращаемое значение
Общее количество байтов, считанных в буфер. Это число может быть меньше количества выделенных в буфере байтов, если столько байтов в настоящее время недоступно, а также равняться нулю (0), если был достигнут конец потока.
Комментарии
Используйте свойство , CanRead чтобы определить, поддерживает ли текущий экземпляр чтение. Используйте метод для ReadAsync асинхронного чтения из текущего потока.
Реализации этого метода считывают не более buffer.Length
байтов из текущего потока и сохраняют их в buffer
. Текущая позиция в потоке удобочитается на количество прочитанных байтов; Однако при возникновении исключения текущая позиция в потоке остается неизменной. Реализации возвращают число прочитанных байтов. Реализация будет блокироваться до тех пор, пока не будет прочитан хотя бы один байт данных, если данные не будут доступны. Read
возвращает значение 0, только если в потоке больше нет данных и больше не ожидается (например, закрытый сокет или конец файла). Реализация может возвращать меньше байтов, чем запрошено, даже если не достигнут конец потока.
Используется BinaryReader для чтения примитивных типов данных.
Применяется к
Read(Byte[], Int32, Int32)
- Исходный код:
- BufferedStream.cs
- Исходный код:
- BufferedStream.cs
- Исходный код:
- BufferedStream.cs
Копирует байты из текущего буферизованного потока в массив.
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
Параметры
- arraybuffer
- Byte[]
Буфер, в который необходимо скопировать байты.
- offset
- Int32
Смещение в буфере (в байтах), с которого начинается чтение байтов.
- count
- Int32
Количество байтов, чтение которых необходимо выполнить.
Возвращаемое значение
Общее число байтов, считанных в array
. Это число может быть меньше, чем количество запрошенных байтов, если столько байтов в настоящее время недоступно, или равняться нулю, если конец файла был достигнут раньше, чем были считаны данные.
Исключения
Длина array
минус offset
меньше count
.
array
имеет значение null
.
offset
или count
является отрицательным значением.
Поток не открыт или его значение равно null
.
Поток не поддерживает чтение.
Методы были вызваны после закрытия потока.
Примеры
Этот пример входит в состав более крупного примера использования класса BufferedStream.
// 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"))
Комментарии
Метод Read
возвращает значение 0, только если достигнут конец потока. Во всех остальных случаях Read
всегда считывает по крайней мере один байт из потока перед возвратом. По определению, если данные из потока не доступны при вызове Read
метода , Read
метод возвращает 0 (конец потока достигается автоматически). Реализация может возвращать меньше байтов, чем запрошено, даже если не достигнут конец потока.
Используется BinaryReader для чтения примитивных типов данных.
См. также раздел
- BlockCopy(Array, Int32, Array, Int32, Int32)
- CanRead
- Write(Byte[], Int32, Int32)
- Файловый и потоковый ввод-вывод
- Практическое руководство. Чтение текста из файла
- Практическое руководство. Запись текста в файл