내보내기(0) 인쇄
모두 확장
이 문서는 수동으로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오.
번역
원본

UnmanagedMemoryStream 클래스

관리 코드에서 관리되지 않는 메모리 블록에 액세스할 수 있도록 합니다.

네임스페이스:  System.IO
어셈블리:  mscorlib(mscorlib.dll)

public class UnmanagedMemoryStream : Stream

UnmanagedMemoryStream 형식에서는 다음과 같은 멤버를 노출합니다.

  이름설명
Protected 메서드UnmanagedMemoryStream() UnmanagedMemoryStream 클래스의 새 인스턴스를 초기화합니다.
Public 메서드UnmanagedMemoryStream(Byte*, Int64)지정된 위치와 메모리 길이를 사용하여 UnmanagedMemoryStream 클래스의 새 인스턴스를 초기화합니다.
Public 메서드UnmanagedMemoryStream(SafeBuffer, Int64, Int64)지정된 오프셋과 길이를 사용하여 안전한 버퍼에서 UnmanagedMemoryStream 클래스의 새 인스턴스를 초기화합니다.
Public 메서드UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)지정된 위치, 메모리 길이, 총 메모리 양 및 파일 액세스 값을 사용하여 UnmanagedMemoryStream 클래스의 새 인스턴스를 초기화합니다.
Public 메서드UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)지정된 오프셋, 길이 및 파일 액세스를 사용하여 안전한 버퍼에서 UnmanagedMemoryStream 클래스의 새 인스턴스를 초기화합니다.
위쪽

  이름설명
Public 속성CanRead스트림이 읽기를 지원하는지 여부를 나타내는 값을 가져옵니다. (Stream.CanRead을(를) 재정의함)
Public 속성CanSeek스트림이 검색을 지원하는지 여부를 나타내는 값을 가져옵니다. (Stream.CanSeek을(를) 재정의함)
Public 속성CanTimeout현재 스트림이 시간 초과될 수 있는지 여부를 결정하는 값을 가져옵니다. (Stream에서 상속됨)
Public 속성CanWrite스트림이 쓰기를 지원하는지 여부를 나타내는 값을 가져옵니다. (Stream.CanWrite을(를) 재정의함)
Public 속성Capacity스트림에 할당된 스트림 길이(크기) 또는 총 메모리 양(용량)을 가져옵니다.
Public 속성Length스트림의 데이터 길이를 가져옵니다. (Stream.Length을(를) 재정의함)
Public 속성Position스트림 내의 현재 위치를 가져오거나 설정합니다. (Stream.Position을(를) 재정의함)
Public 속성PositionPointer스트림 내의 현재 위치를 기준으로 스트림에 대한 바이트 포인터를 가져오거나 설정합니다.
Public 속성ReadTimeout스트림 읽기 시도가 만료되기 전까지 기다릴 시간을 결정하는 값을 밀리초 단위로 가져오거나 설정합니다. (Stream에서 상속됨)
Public 속성WriteTimeout스트림 쓰기 시도가 만료되기 전까지 기다릴 시간을 결정하는 값을 밀리초 단위로 가져오거나 설정합니다. (Stream에서 상속됨)
위쪽

  이름설명
Public 메서드BeginRead비동기 읽기 작업을 시작합니다. (Stream에서 상속됨)
Public 메서드BeginWrite비동기 쓰기 작업을 시작합니다. (Stream에서 상속됨)
Public 메서드Close현재 스트림을 닫고 현재 스트림과 관련된 소켓과 파일 핸들 등의 리소스를 모두 해제합니다. (Stream에서 상속됨)
Public 메서드CopyTo(Stream)현재 스트림에서 바이트를 읽어서 대상 스트림에 해당 바이트를 기록합니다. (Stream에서 상속됨)
Public 메서드CopyTo(Stream, Int32)현재 스트림에서 모든 바이트를 읽어 지정된 버퍼 크기로 대상 스트림에 씁니다. (Stream에서 상속됨)
Public 메서드CreateObjRef원격 개체와 통신하는 데 사용되는 프록시 생성에 필요한 모든 관련 정보가 들어 있는 개체를 만듭니다. (MarshalByRefObject에서 상속됨)
Protected 메서드CreateWaitHandle 사용되지 않습니다. WaitHandle 개체를 할당합니다. (Stream에서 상속됨)
Public 메서드Dispose() Stream 에서 사용하는 모든 리소스를 해제합니다. (Stream에서 상속됨)
Protected 메서드Dispose(Boolean) UnmanagedMemoryStream 에서 사용하는 관리되지 않는 리소스를 해제하고, 관리되는 리소스를 선택적으로 해제할 수 있습니다. (Stream.Dispose(Boolean)을(를) 재정의함)
Public 메서드EndRead보류 중인 비동기 읽기가 완료되기를 기다립니다. (Stream에서 상속됨)
Public 메서드EndWrite비동기 쓰기 작업을 끝냅니다. (Stream에서 상속됨)
Public 메서드Equals(Object)지정한 Object가 현재 Object와 같은지 여부를 확인합니다. (Object에서 상속됨)
Protected 메서드Finalize 개체가 가비지 수집자에서 회수되기 전에, 해당 개체에서 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다. (Object에서 상속됨)
Public 메서드Flush Flush 메서드를 재정의하여 아무런 작업도 수행되지 않도록 합니다. (Stream.Flush()을(를) 재정의함)
Public 메서드GetHashCode특정 형식에 대한 해시 함수 역할을 합니다. (Object에서 상속됨)
Public 메서드GetLifetimeService이 인스턴스의 수명 정책을 제어하는 현재의 수명 서비스 개체를 검색합니다. (MarshalByRefObject에서 상속됨)
Public 메서드GetType현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨)
Protected 메서드Initialize(Byte*, Int64, Int64, FileAccess)관리되지 않는 메모리 위치에 대한 포인터를 사용하여 UnmanagedMemoryStream 클래스의 새 인스턴스를 초기화합니다.
Protected 메서드Initialize(SafeBuffer, Int64, Int64, FileAccess)지정된 오프셋, 길이 및 파일 액세스를 사용하여 안전한 버퍼에서 UnmanagedMemoryStream 클래스의 새 인스턴스를 초기화합니다.
Public 메서드InitializeLifetimeService이 인스턴스의 수명 정책을 제어하기 위한 수명 서비스 개체를 가져옵니다. (MarshalByRefObject에서 상속됨)
Protected 메서드MemberwiseClone()현재 Object의 단순 복사본을 만듭니다. (Object에서 상속됨)
Protected 메서드MemberwiseClone(Boolean)현재 MarshalByRefObject 개체의 단순 복사본을 만듭니다. (MarshalByRefObject에서 상속됨)
Protected 메서드ObjectInvariant인프라입니다. Contract 에 대한 지원을 제공합니다. (Stream에서 상속됨)
Public 메서드Read지정된 바이트 수를 지정된 배열로 읽어 들입니다. (Stream.Read(Byte[], Int32, Int32)을(를) 재정의함)
Public 메서드ReadByte스트림에서 바이트를 읽고 스트림 내 위치를 한 바이트씩 앞으로 이동하거나 스트림 끝일 경우 -1을 반환합니다. (Stream.ReadByte()을(를) 재정의함)
Public 메서드Seek현재 스트림의 현재 위치를 주어진 값으로 설정합니다. (Stream.Seek(Int64, SeekOrigin)을(를) 재정의함)
Public 메서드SetLength스트림의 길이를 지정된 값으로 설정합니다. (Stream.SetLength(Int64)을(를) 재정의함)
Public 메서드ToString현재 개체를 나타내는 문자열을 반환합니다. (Object에서 상속됨)
Public 메서드Write버퍼의 데이터를 사용하여 현재 스트림에 바이트 블록을 씁니다. (Stream.Write(Byte[], Int32, Int32)을(를) 재정의함)
Public 메서드WriteByte파일 스트림의 현재 위치에 바이트를 씁니다. (Stream.WriteByte(Byte)을(를) 재정의함)
위쪽

이 클래스를 사용하면 기존의 스트림 기반 모델을 사용하여 관리되지 않는 메모리에 액세스할 수 있으며 관리되지 않는 메모리의 내용을 힙에 복사할 필요가 없습니다.

다음 코드 예제에서는 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();
    }
}


.NET Framework

4, 3.5, 3.0, 2.0에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

Windows 7, Windows Vista SP1 이상, Windows XP SP3, Windows XP SP2 x64 버전, Windows Server 2008(Server Core는 지원되지 않음), Windows Server 2008 R2(Server Core는 SP1 이상에서 지원됨), Windows Server 2003 SP2

.NET Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

이 형식의 모든 공용 static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

커뮤니티 추가 항목

추가
Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2014 Microsoft