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

명성님의 프로필 이미지
명성

작성한 질문수

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

Serialization #1

new Span<byte>에서 3번째 인자(length) 질문

작성

·

41

·

수정됨

0

success &= BitConverter.TryWriteBytes(new Span<byte>(s.Array, s.Offset + size, s.Count - count)

이런 코드가 있는

s.Count - count가 아니라
그냥 type의 사이즈만큼 주면 안되는건가요? 우리가 필요한 부분은 딱 사이즈만큼 이라고 생각해서 그렇습니다!

s.Count - count 는 4094? 이런식으로 나오는
굳이 그만큼 받아와야 하는지 궁금합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

new Span<byte>(s.Array, s.Offset + size, s.Count - count) 코드의 세 번째 인자는 Span<byte>가 참조할 배열(s.Array)의 부분 범위의 길이를 지정합니다. 여기서 s.Count - count는 전체 배열 길이에서 특정 위치까지 처리된 부분을 제외한 나머지 부분의 길이를 의미하며, 이를 통해 처리해야 할 데이터의 정확한 범위를 지정합니다.

type의 사이즈만큼 주는 경우와 s.Count - count를 사용하는 경우의 차이는, 단순히 type의 사이즈만큼 데이터를 처리하는 것이 아니라, 동적으로 변하는 데이터의 양을 처리해야 할 때 s.Count - count 방식을 사용합니다. s.Count - count는 버퍼에서 아직 처리하지 않은 데이터의 크기를 동적으로 계산하여, 남아 있는 데이터를 정확히 처리할 수 있도록 합니다.

즉, 처리해야 할 데이터의 양이 고정된 경우가 아니라 변할 수 있을 때, s.Count - count를 사용하여 남아 있는 데이터의 양을 정확하게 지정하는 것입니다. 따라서, 정확한 처리를 위해 전체 길이(s.Count)에서 이미 처리한 길이(count)를 빼서 남은 데이터의 정확한 길이를 지정하는 것이 필요합니다.

이러한 방식은 특히 네트워크 프로그래밍이나 파일 입출력과 같이 데이터의 양이 동적으로 변할 수 있는 상황에서 유용하게 사용됩니다. 미리 정해진 type의 사이즈만큼 데이터를 처리하는 것과는 다르게, 실제 처리해야 할 데이터의 양을 보다 유연하게 지정할 수 있습니다.

명성님의 프로필 이미지
명성

작성한 질문수

질문하기