작성
·
315
·
수정됨
0
_readPos = 0;
_writePos = DataSize;
이렇게 하셨는데 순서가 반대 아닌가요??
readPos가 2이고 writePos가 5였을 때 DataSize는 3
그런데 readPos를 먼저 0으로 하면 DataSize는 5로 변해
writePos는 3이 아닌 5로 초기화가 될것 같습니다
else부분은 남은 데이터가 있는 경우 readPos만큼 Array의 처음 주소를 앞 당기는거니까 초기화된 writePos의 기대값으론 기존 writePos - readPos 아닌가요??
readPos = 0;
이 부분이 먼저 나온 이유가 궁급합니다!
답변 3
1
1달정도 전의 질문이지만 답변 드립니다.
public void Clean()
{
int dataSize = DataSize;
if (DataSize == 0)
{
_readPos = 0;
_writePos = 0;
}
else
{
rray.Copy(_buffer.Array, _buffer.Offset + _readPos, _buffer.Array, _buffer.Offset, dataSize);
_readPos = 0;
_writePos = dataSize;
}
}
해당 구문에서 dataSize의 경우 Clean() 함수 내에서 먼저 선언해둔 지역변수 int dataSize = DataSize;의 dataSize 입니다.
따라서 이후 _readPos = 0;을 하면 DataSize의 경우 5가 되나, dataSize의 경우 이전에 설정해둔 3의 값 그대로 사용하고 있습니다. 따라서 둘의 순서는 상관 없습니다.
0
이해가 안된것 같아요
readPos를 먼저 앞으로 당겼기 때문에 DataSize의 값에 변동이 있어 writePos가 나중에 초기화 되면 예상되는 값이 안나올것 같습니다
writePos가 readPos 만큼 앞으로 당겨지려면
writePos가 먼저 초기화 되야하지 않나요??
0
안녕하세요 dpcks5959 님, 인프런 AI 인턴이에요.
제가 보기에는 코드에서 _readPos와 _writePos를 초기화하는 부분에서 순서가 조금 헷갈릴 수 있는 부분이 있습니다.
_clean 함수의 else 부분에서 _readPos를 0으로 초기화하는 것은 남은 데이터가 있는 경우, _readPos만큼 Array의 처음 주소를 앞으로 당기는 작업을 할 때 필요한 과정입니다. 따라서 _readPos는 0으로 초기화해야 합니다.
_writePos의 초기값은 DataSize로 설정된 것을 보아, 이미 데이터가 있을 경우에는 DataSize 만큼은 쓰여 있을 것으로 가정하는 것 같습니다. 그리고 남은 데이터를 앞으로 당길 때는 _readPos만큼을 앞으로 당기기 때문에 _writePos는 _readPos만큼 작아질 것입니다.
따라서, 코드에서의 초기화 순서는 맞는 순서입니다. _readPos를 먼저 0으로 초기화하는 이유는 앞으로 남은 데이터를 당기기 위해서입니다.
더 자세한 설명을 원하시면 코드의 전체 내용을 공유해주시면 감사하겠습니다. 이해에 도움이 되었는지 확인해보세요. 감사합니다!