필요 로직 목록
1.
custom buffer
2.
custom buffer의 position 부터 limit 사이의 값 파싱
3.
파싱된 Record 저장 및 활용 가능 기능 또는 확장 기능
Custom Buffer 설계 방식 생각
1.
buffer의 끝만큼 채운다.
2.
채운 버퍼의 요소를 하나씩 들고 온다.
3.
특정 문자열에 해당할 경우와 아닌 경우를 판단한다.
4.
해당 문자열의 끝을 찾는다.
5.
해당 문자열의 끝이라면 field를 생성한다.
6.
해당 문자열의 집합의 끝일 경우 Record를 생성한다.
설계시 고려 사항
1.
캐리지리턴을 포함하는 문자열은 무조건 “ 따옴표로 감싸진다.
2.
“ 인용구를 포함하는 문자열의 경우 문자열의 시작/끝을 “ 인용구로 감싼다.
3.
“ 인용구를 포함하는 문자열의 인용구를 하나 더 추가한다.
4.
일반 문자열은 외로 그냥 읽으면 된다.
캐리지 리턴 구문을 포함한 문자열 구분
인용구를 하나의 인용구로 변환
빈 문자열에 대한 처리는 null이 아닌 공백 문자열
발생할 수 있는 문제 사항
1.
캐리지 리턴을 포함한 필드가 존재할 경우 필드 분리 기준을 넘어서 읽어들임.
2.
캐리지 리턴을 포한한 문자열이 있을 경우 필드 분리 기준 전까지 읽어들임.
구현 방식 생각
1.
"따옴표 처음부터 들어올때 -> inField -> 완전 다른 로직
infield가 true 면 \n, \r, \t 등등은 아무 소용없음
2.
a 처럼 일반 문자열 들어올때 -> separater까지
3.
lineDelimiter가 들어오면 row의 끝을 의미
말로 풀어서 설명
버퍼에 들어온 모든 값을 다 채움
row 파싱 로직을 돌림 -> 특정 로직
row 파싱이 끝나면 콜백 던짐
이후 남은 버퍼에 계속 채우고 반복함.