인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Hustleinmablood김용호님의 프로필 이미지
Hustleinmablood김용호

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Serialization #3

9분 50초부분부터 궁금한게 있습니다

작성

·

226

0

ushort nameLen = (ushort)Encoding.Unicode.GetByteCount(this.name);
succes &= BitConverter.TryWriteBytes
(s.Slice(count, s.Length-count), nameLength);
count += sizeof(ushort);

Array.Copy(Encoding.Unicode.GetBytes(this.name), 0,segement.Array,count ,nameLength);
            count += nameLength;
==========================================

저는 변수 count의 용도를
실제  패킷의 사이즈 가늠용도로 파악하였고
그래서  패킷의 다음 속성 데이터가 들어올떄 count인덱스부터 들어가면  되겠다라고 이해했습니다

배열을 복사하고 스트링데이터가 버퍼에 들어갈 공간을 설정후,  그만큼 공간을 차지하게 되니
count += nameLen(스트링길이)  더하는건 이해가 가는데

(질문)
그전에 스트링을 인코딩으로 바이트배열로 바꾸고
 count += sizeof(ushort) 하는 이유가 잘 이해가 안가서 질문드립니다
혹시 인코딩 과정자체도 패킷의 사이즈가 늘어나는것인가요?


답변 2

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

크기를 적어서 건내주기 위한 2바이트가 소요되기 때문입니다.
가령 가변길이 데이터가 10바이트라면("AAAABBBBCC"),
데이터가 10바이트라는 사실을 알려주기 위해
short 타입 숫자를 먼저 기입하고, 이어서 바로 데이터가 들어가게 되겠죠.
수신측에서도 10이라는 숫자를 파싱할 수는 있어야 하니
2바이트 만큼 추가로 할당해주는 것입니다.

0

제가 초보라 설명 보기 정말 답답하셨을텐데 감사합니다 ㅠ
혹시 했던부분이 맞아서 그나마 다행이네요
빠른 답변 고맙습니다!

Hustleinmablood김용호님의 프로필 이미지
Hustleinmablood김용호

작성한 질문수

질문하기