식별자
내 파일인지 먼저 확인합니다.
바이트를 그대로 저장할수록 읽는 코드가 더 많은 약속을 책임집니다.
최소 포맷을 정하면 read() 실패와 플랫폼 차이를 추적하기
쉬워집니다.
내 파일인지 먼저 확인합니다.
구조 변경을 분기합니다.
반복 읽기 범위를 정합니다.
sizeof(T)만큼 건너뛰어 원하는 레코드의 바이트
위치를 계산합니다.
길이 뒤에 실제 바이트를 둡니다.
[header] -> [record 0] [record 1] ... -> [length][bytes]
seekg(base + index * sizeof(Record))
필드 순서와 크기를 고정하고, 문자열은 객체 자체가 아니라 길이와 내용을 씁니다.
헤더 검증 후 필요한 바이트 수를 읽었는지 확인하고, 실패하면 부분 객체를 버립니다.
포인터 주소, 패딩에 의존한 구조체, 실행 중 메모리 배치는 파일 포맷으로 삼지 않습니다.