UnmanagedMemoryStream.Read Метод

Определение

Перегрузки

Имя Описание
Read(Span<Byte>)

Считывает все байты этого неуправляемого потока памяти в указанный диапазон байтов.

Read(Byte[], Int32, Int32)

Считывает указанное число байтов в указанный массив.

Read(Span<Byte>)

Исходный код:
UnmanagedMemoryStream.cs
Исходный код:
UnmanagedMemoryStream.cs
Исходный код:
UnmanagedMemoryStream.cs
Исходный код:
UnmanagedMemoryStream.cs
Исходный код:
UnmanagedMemoryStream.cs

Считывает все байты этого неуправляемого потока памяти в указанный диапазон байтов.

public:
 override int Read(Span<System::Byte> buffer);
public:
 override int Read(Span<System::Byte> destination);
public override int Read(Span<byte> buffer);
public override int Read(Span<byte> destination);
override this.Read : Span<byte> -> int
override this.Read : Span<byte> -> int
Public Overrides Function Read (buffer As Span(Of Byte)) As Integer
Public Overrides Function Read (destination As Span(Of Byte)) As Integer

Параметры

destinationbuffer
Span<Byte>

При возврате этого метода этот диапазон содержит все байты из неуправляемого потока памяти.

Возвращаемое значение

Общее количество байтов, считываемых в место назначения.

Применяется к

Read(Byte[], Int32, Int32)

Исходный код:
UnmanagedMemoryStream.cs
Исходный код:
UnmanagedMemoryStream.cs
Исходный код:
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), если достигнут конец потока.

Исключения

Поток закрыт.

Базовая память не поддерживает чтение.

–или–

Для свойства CanRead задано значение false.

Значение параметра buffernull.

Параметр 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, метод блокируется до тех пор, пока не будет возвращен хотя бы один байт данных. Реализация может возвращать меньше байтов, чем запрошено, даже если конец потока не достигнут.

Применяется к