파일처리

[파일처리] Record Structure 보충 / 활용

서노리 2022. 4. 24. 19:42
반응형

※ 길이 지시자(Length Indicator)를 이용한 레코드 구조 예시

필드 구분 방법 : 구분자 방식(Separate Fields with Delimiters)
레코드 구분 방법 : 길이 지시자 방식(Records with a Length Indicator)

 

※ WritePerson()의 과정

1. 각 레코드를 기록하기 전에 해당 레코드의 필드 길이의 합을 알아야만 함
2. 버퍼에 레코드의 전체 내용을 저장 (필드 사이에 구분자를 추가)
3. 버퍼의 길이를 통해 레코드의 길이를 구함
4. 파일에 레코드의 길이를 write
5. 파일에 버퍼 내용을 write

 

※ 레코드 길이 표현 방법

 

  • 2byte binary form
    - 문자형태로 변환할 필요 없음
    - ASCII 형태로 저장할 때보다 메모리를 절약할 수 있음
    - 파일을 읽을 때 레코드 길이 그 자체로 보이지 않아 해석하는 작업이 필요함
    - ex) 레코드 길이 40 -> 00 28 (16진수 값) -> '\0' '(' (파일에 저장된 문자)

  • ASCII form
    - 정수를 각 숫자마다 문자로 저장하는 방식
    - 따라서 파일을 읽을 때 문자 그대로가 레코드의 길이임
    - 정수의 자릿수마다 메모리가 필요하므로 메모리 낭비가 심함
    - ex) 레코드 길이 40 -> 34 30 (16진수 값) -> '4' '0' (파일에 저장된 문자)

파일 덤프를 확인해본 결과 binary form으로 저장된 것을 알 수 있다.

 


※ ReadPerson()의 과정

1. read 할 데이터의 offset 위치로 lseek()을 통해 이동
2. 레코드의 길이를 읽음
3. 레코드 길이 + 널문자가 들어갈 크기만큼의 버퍼 생성
4. 버퍼에 레코드 길이 만큼 read
5. 각 필드를 추출하여 저장


 

반응형