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