4.6 요약
직렬화는 복잡한 데이터 구조를 받아 일련의 바이트 배열로 쪼개어 처리하는 과정이다. 이 바이트 열은 네트워크상 여러 호스트로 전송할 수 있다. memcpy()를 사용해 구조체를 배열로 복사해 넣는 단순한 방법도 있지만, 제한적인 경우에만 쓸 수 있다. 이를 극복하기 위해 스트림을 연장 삼아 복잡한 데이터 구조를 직렬화하는 데, 원시 자료형뿐만 아니라 다른 구조체에 대한 참조 또한 전송하여 추후 링킹 기법으로 연결 정보를 재구축할 수 있다.
데이터를 효율적으로 직렬화하는 여러 기법이 있다. 희소 데이터 구조체는 축약된 형식으로 직렬화할 수 있다. 엔트로피 인코딩을 쓰면 기댓값이 존재하는 멤버 변수를 손실 없이 압축할 수 있다. 기하 데이터 또는 이와 유사하게 데이터에 내제된 제약 조건을 활용하면 역시 손실 없는 압축을 구현할 수 있는데, 이러한 조건을 이용하면 필요하지 않은 정보를 제거해서 보내도, 받는 쪽에서 제거된 나머지 정보를 복원해낼 수 있다. 정밀도를 약간 손실해도 무방하다면, 부동소수점 숫자를 미리 파악된 범위 내의 고정소수점 숫자로 변환하여 필요한 만큼의 정밀도로 그 값을 전송할 수 있다.