Binary Seek

고정 크기 레코드는 index와 sizeof로 바로 찾아간다

바이너리 파일에서 랜덤 접근이 빠른 이유는 레코드 크기가 고정되어 있으면 원하는 레코드의 시작 바이트를 계산할 수 있기 때문입니다.

파일 시작Record 크기 = sizeof(Record)
0Record 0id 1, score 80
1 * sizeofRecord 1id 2, score 90
2 * sizeofRecord 2seekg가 이 시작점으로 이동한 뒤 read가 구조체 크기만큼 채웁니다.
3번째 레코드, index 2 offset = 2 * sizeof(Record)

파일 시작 기준으로 계산한 바이트 위치를 seekg에 넘기면 바로 해당 레코드로 이동합니다.

실행 순서
seekg읽기 위치를 계산된 오프셋으로 옮깁니다.
read정해진 byte 수만큼 구조체 버퍼에 채웁니다.
state읽은 바이트 수와 실패 플래그를 확인합니다.
함수
역할
주의점
함수seekg
역할읽기 위치를 파일 시작, 현재, 끝 기준으로 이동합니다.
주의점오프셋은 byte 단위입니다.
함수seekp
역할쓰기 위치를 원하는 바이트로 이동합니다.
주의점덮어쓰기 범위를 계산해야 합니다.
함수tellg/tellp
역할현재 읽기/쓰기 위치를 확인합니다.
주의점실패 상태면 먼저 복구합니다.
랜덤 접근은 “레코드 크기가 고정”일 때 단순합니다. 문자열이나 포인터처럼 크기와 의미가 변하는 멤버는 별도 포맷이 필요합니다.