UnmanagedMemoryStream.Read Метод
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Read(Span<Byte>) |
Считывает все байты этого неуправляемого потока памяти в указанный диапазон байтов. |
Read(Byte[], Int32, Int32) |
Считывает указанное число байтов в указанный массив. |
- Исходный код:
- UnmanagedMemoryStream.cs
- Исходный код:
- UnmanagedMemoryStream.cs
- Исходный код:
- UnmanagedMemoryStream.cs
Считывает все байты этого неуправляемого потока памяти в указанный диапазон байтов.
public:
override int Read(Span<System::Byte> destination);
public:
override int Read(Span<System::Byte> buffer);
public override int Read (Span<byte> destination);
public override int Read (Span<byte> buffer);
override this.Read : Span<byte> -> int
override this.Read : Span<byte> -> int
Public Overrides Function Read (destination As Span(Of Byte)) As Integer
Public Overrides Function Read (buffer As Span(Of Byte)) As Integer
Параметры
При возврате из этого метода данный диапазон содержит все байты из неуправляемого потока памяти.
Возвращаемое значение
Общее количество байтов, считанных в место назначения.
Применяется к
- Исходный код:
- UnmanagedMemoryStream.cs
- Исходный код:
- UnmanagedMemoryStream.cs
- Исходный код:
- UnmanagedMemoryStream.cs
Считывает указанное число байтов в указанный массив.
public:
override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public override int Read (byte[] buffer, int offset, int count);
override this.Read : byte[] * int * int -> int
Public Overrides 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), если был достигнут конец потока.
Исключения
Поток закрыт.
Значение параметра buffer
— null
.
Значение параметра offset
меньше нуля.
-или-
Значение параметра count
меньше нуля.
Длина массива буфера без учета параметра offset
меньше значения параметра count
.
Примеры
В следующем примере кода показано, как выполнять чтение и запись в неуправляемую память с помощью UnmanagedMemoryStream класса . Блок неуправляемой памяти выделяется и отменяется с помощью Marshal класса .
// Note: you must compile this sample using the unsafe flag.
// From the command line, type the following: csc sample.cs /unsafe
using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;
unsafe class TestWriter
{
static void Main()
{
// Create some data to read and write.
byte[] message = UnicodeEncoding.Unicode.GetBytes("Here is some data.");
// Allocate a block of unmanaged memory and return an IntPtr object.
IntPtr memIntPtr = Marshal.AllocHGlobal(message.Length);
// Get a byte pointer from the IntPtr object.
byte* memBytePtr = (byte*)memIntPtr.ToPointer();
// Create an UnmanagedMemoryStream object using a pointer to unmanaged memory.
UnmanagedMemoryStream writeStream = new UnmanagedMemoryStream(memBytePtr, message.Length, message.Length, FileAccess.Write);
// Write the data.
writeStream.Write(message, 0, message.Length);
// Close the stream.
writeStream.Close();
// Create another UnmanagedMemoryStream object using a pointer to unmanaged memory.
UnmanagedMemoryStream readStream = new UnmanagedMemoryStream(memBytePtr, message.Length, message.Length, FileAccess.Read);
// Create a byte array to hold data from unmanaged memory.
byte[] outMessage = new byte[message.Length];
// Read from unmanaged memory to the byte array.
readStream.Read(outMessage, 0, message.Length);
// Close the stream.
readStream.Close();
// Display the data to the console.
Console.WriteLine(UnicodeEncoding.Unicode.GetString(outMessage));
// Free the block of unmanaged memory.
Marshal.FreeHGlobal(memIntPtr);
Console.ReadLine();
}
}
Комментарии
Параметр offset
задает смещение байта в параметре array
(индексе буфера), с которого начинается чтение, а count
параметр — максимальное количество байтов, которые будут считываться из этого потока. Возвращаемое значение — это фактическое число прочитанных байтов или ноль, если достигнут конец потока. Если операция чтения выполнена успешно, текущая позиция потока будет расширена на количество прочитанных байтов. Если возникает исключение, текущая позиция потока не изменяется.
Метод Read возвращает ноль только после достижения конца потока. В противном Read случае всегда считывает по крайней мере один байт из потока перед возвратом. Если данные из потока не доступны при вызове Readметода , метод блокируется до тех пор, пока не будет возвращен хотя бы один байт данных. Реализация может возвращать меньше байтов, чем запрошено, даже если конец потока не достигнут.
Применяется к
.NET кері байланысы
.NET — бастапқы коды ашық жоба. Пікір қалдыру үшін сілтемені таңдаңыз: