2011-08-02 2 views
2

포인터를 직렬화하거나 비 직렬화 할 수 있습니까?C#에서 포인터를 직렬화 및 비 직렬화하는 방법이 있습니까?

public unsafe class Class001 
    { 
     public byte* pointer; 

     public Class001() 
     { 

      var byteArr = new byte[] {12, 54, 20}; 

      fixed(byte* ptr = byteArr) 
      { 
       pointer = ptr; 
      } 
     } 
    } 

내가 파일에 포인터의 16 진수 값을 저장하고 파일을 읽고이 반사를 사용하여 재구성 할 수 다음과 같이 I 클래스가 있다고 가정?

필자는 파일의 일부 값을 저장하고 나중에 다시 구성한다는 의미로 serialization/deserialization이라는 단어를 사용했지만 표준 직렬화 프로세스 일 필요는 없습니다.

+2

고정 블록을 떠나 자마자 포인터의 값이 배열의 시작을 더 이상 가리킬 수 없습니다. –

+2

"serialize ... pointer"로 "포인터의 값 *"또는 "데이터 * 값 * 포인터의 값"을 의미합니까? –

+0

@Marc Gravell, 나는 포인터의 가치에 대해 이야기하고있었습니다. 어쨌든 Jon Grant & MattDavey가 말한 것처럼 포인터를 비 직렬화하는 것은 중요하지 않습니다. –

답변

7

절대적으로! 포인터는 특정 메모리 위치에 대한 참조입니다. 해당 특정 메모리 주소의 16 진수 값을 실제로 serialize 할 수 있습니다. 그러나 deserialize 할 때 해당 메모리 주소에는 확실히 완전히 다른 내용이 포함됩니다.

+1

.. . 또는 더 많은 경우, 유효하지 않은 (할당되지 않은) 주소를 가리 킵니다. – Lucero

+0

답변 해 주셔서 감사합니다. 나도 그렇게 생각했다. 단지 확인하고 싶었다. –

관련 문제