직렬화
- 직렬화
- 메모리상에 있는 객체를 전송/ 저장 가능한 형태로 만드는 것
- 소켓통신에서는 바이트를 많이 사용
- 역직렬화
- 직렬화된 데이터를 다시 객체의 형태로 만드는 것
//직렬화
int num = 123;
byte[] buffer = BitConverter.GetBytes(num);
//역직렬화
//buffer라는 바이트 배열을 0번째 인덱스부터 시작해서 4바이트를 읽으라는 의미
int num2 = BitConverter.ToInt32(buffer, 0);
- long 타입을 사용한 예제
long은 8byte 짜리 자료형이므로 버퍼의 길이는 8이 나온다.
//직렬화
long num = 123;
byte[] buffer = BitConverter.GetBytes(num);
Console.WriteLine(buffer.Length);
//역직렬화
long num2 = BitConverter.ToInt64(buffer, 0);
Console.WriteLine(num2);
결과
- string 타입을 사용한 예제
//string
//직렬화
string str = "Hello world";
//문자열을 직렬화할 때는 BitConverter가 아닌 Encoding사용
byte[] buffer2 = Encoding.UTF8.GetBytes(str);
Console.WriteLine(buffer2.Length);
//역직렬화
string str2 = Encoding.UTF8.GetString(buffer2);
Console.WriteLine(str2);
결과
바이트 오더
바이트 오더 : 바이트를 메모리에 저장하는 순서
1. 리틀엔디언 : 하위 바이트부터 저장
2. 빅엔디언 : 상위 바이트부터 저장
* 리틀엔디언 시스템에서 데이터를 보내고 빅엔디언에서 받는다면
데이터를 정상적으로 가져올 수 없다.
데이터 통신을 할 때는 빅엔디언 방식을 사용한다.
//리틀엔디언
byte[] buffer = BitConverter.GetBytes(1234567);
Console.WriteLine(BitConverter.ToString(buffer));
// 빅엔디언
int num = IPAddress.HostToNetworkOrder(1234567);
byte[] buffer2 = BitConverter.GetBytes(num);
Console.WriteLine(BitConverter.ToString(buffer2));
결과
'웹 개발 > 네트워크' 카테고리의 다른 글
[C#] TCP/IP 소켓 프로그래밍_handshake (0) | 2023.07.27 |
---|---|
[C#] TCP/IP 소켓 프로그래밍_ echo 프로그램 (0) | 2023.07.20 |
[C#] TCP/IP 소켓 프로그래밍_ Socket 객체 생성 (0) | 2023.07.19 |
[C#] TCP/IP 소켓 프로그래밍_ 소켓 기초용어 정리 (0) | 2023.07.15 |
[C#] TCP/IP 소켓 프로그래밍_ 네트워크 기초용어 정리 (0) | 2023.07.15 |