UnmanagedMemoryStream.Read Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Sobrecargas
| Name | Description |
|---|---|
| Read(Span<Byte>) |
Lê todos os bytes deste fluxo de memória não gerido no intervalo especificado de bytes. |
| Read(Byte[], Int32, Int32) |
Lê o número especificado de bytes no array especificado. |
Read(Span<Byte>)
- Origem:
- UnmanagedMemoryStream.cs
- Origem:
- UnmanagedMemoryStream.cs
- Origem:
- UnmanagedMemoryStream.cs
- Origem:
- UnmanagedMemoryStream.cs
- Origem:
- UnmanagedMemoryStream.cs
Lê todos os bytes deste fluxo de memória não gerido no intervalo especificado de bytes.
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
Parâmetros
Quando este método regressa, este span contém todos os bytes do fluxo de memória não gerido.
Devoluções
O número total de bytes lidos no destino.
Aplica-se a
Read(Byte[], Int32, Int32)
- Origem:
- UnmanagedMemoryStream.cs
- Origem:
- UnmanagedMemoryStream.cs
- Origem:
- UnmanagedMemoryStream.cs
- Origem:
- UnmanagedMemoryStream.cs
- Origem:
- UnmanagedMemoryStream.cs
Lê o número especificado de bytes no array especificado.
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
Parâmetros
- buffer
- Byte[]
Quando este método retorna, contém o array de bytes especificado com os valores entre offset e (offset + count - 1) substituídos pelos bytes lidos da fonte atual. Este parâmetro é passado sem inicializar.
- offset
- Int32
O deslocamento de bytes baseado em zero em buffer que começar a armazenar os dados lidos do fluxo atual.
- count
- Int32
O número máximo de bytes a ler do fluxo atual.
Devoluções
O número total de bytes lidos no buffer. Isto pode ser inferior ao número de bytes solicitados se esse número de bytes não estiver disponível atualmente, ou zero (0) se o fim do fluxo for atingido.
Exceções
O riacho está fechado.
O buffer parâmetro é definido para null.
O offset parâmetro é inferior a zero.
-ou-
O count parâmetro é inferior a zero.
O comprimento do array de buffer menos o offset parâmetro é menor que o count parâmetro.
Exemplos
O exemplo de código seguinte demonstra como ler e escrever na memória não gerida usando a UnmanagedMemoryStream classe. Um bloco de memória não gerida é alocado e desalocado usando a Marshal classe.
// 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();
}
}
Observações
O offset parâmetro indica o deslocamento do byte no array parâmetro (o índice de buffer) para começar a leitura, e o count parâmetro indica o número máximo de bytes a serem lidos deste fluxo. O valor devolvido é o número real de bytes lidos, ou zero se o fim do fluxo for atingido. Se a operação de leitura for bem-sucedida, a posição atual do fluxo é avançada pelo número de bytes lidos. Se ocorrer uma exceção, a posição atual do fluxo mantém-se inalterada.
O Read método devolve zero apenas depois de chegar ao fim do fluxo. Caso contrário, Read lê sempre pelo menos um byte do stream antes de regressar. Se não houver dados disponíveis do fluxo durante uma chamada para Read, o método bloqueará até que pelo menos um byte de dados possa ser devolvido. Uma implementação pode devolver menos bytes do que o solicitado, mesmo que o fim do fluxo não tenha sido atingido.