반응형

Serialization(직렬화) : 직렬화는 객체를 저장매체(파일이나 메모리와 같은)에 저장하거나 바이너리(이진) 형태로 네트워크를 통해 전달하기 위해 저장하는 과정.

이 연속된 바이트나 포맷은 다시 원래 객체가 가지고 있던 상태로 객체를 재생성하는데 사용할 수 있다.

이렇게 객체를 직렬화하는 과정을 디플레이팅(deflating)또는 마샬링(marshalling)이라고 부른다.

 

Deserialization(역직렬화) : 직렬화와는 반대로 연속된 바이트로부터 어떤 데이터 구조를 추출해내는 과정을 역직렬화라고 한다. 역직렬화는 인플레이팅(inflating) 또는 언마샬링(unmarshalling)이라 불리기도 한다.

 

MemoryStream : 저장소가 메모리인 스트림을 만든다.

구조체를 직렬화하여 저장할 때 사용.

소켓을 통한 전송시스템을 사용할 때 사용하는 것으로 통신속도가 컴퓨터의 속도를 따라가지 못하니

그 가운데서 스트림이 완충 작용을 하는데 많이 사용하고 있다.


엔디언(Endianness)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며,

바이트를 배열하는 방법을 특히 바이트 순서(Byte Order)라고 한다.

 

빅 엔디안 방식은 낮은 주소에 데이터의 높은 바이트(MSB, Most Significant Bit)부터 저장하는 방식이다.

이 방식은 평소 우리가 숫자를 사용하는 선형 방식과 같은 방식이다.

따라서 메모리에 저장된 순서 그대로 읽을 수 있으며, 이해하기가 쉽다는 장접을 가지고 있다.

AMD게열은 빅 엔디안 방식을 사용한다.


리틀 엔디안 방식은 낮은 주소에 데이터의 낮은 바이트(LSB, Least Significant Bit) 부터 저장하는 방식이다.

이 방식은 평소 우리가 숫자를 사용하는 선형 방식과 반대로 거꾸로 읽어야 한다.

대부분의 인텔 CPU 계열에서는 이 방식으로 데이터를 저장한다.

 

빅 엔디안과 리틀 엔디안은 단지 저장해야 할 큰 데이터를 어떻게 나누어 저장하는가에 따른 차이일 뿐, 어느 방식이 더 우수하다고는 단정할 수 없다.

 

물리적으로 데이터를 조작하거나 산술 연산을 수행할 때에는 리틀 엔디안 방식이 더 효율적이고,

데이터의 각 바이트를 배열처럼 취급할 때에는 빅 엔디안 방식이 더 적합하다.

 

현재 우리가 사용하는 인텔 기반의 윈도우는 리틀 엔디안 방식을 사용하고 있을 것이다.

하지만 네트워크를 통해 데이터를 전송할 때에는 빅 엔디안 방식이 사용된다.

따라서 인텔 기반의 시스템에서 소켓 통신을 할 때는 바이트 순서에 신경을 써서 데이터를 전달해야 한다.


 

반응형

'네트워크 프로그래밍' 카테고리의 다른 글

Overlapped I/O 모델  (0) 2022.08.22
유니티 3D 네트워크 게임(2)  (0) 2022.06.03
IOCP 공부 (3)  (0) 2022.05.05
IOCP 공부(2)  (0) 2022.05.02
IOCP 공부(1)  (0) 2022.04.30