CSVParser 설계
•
interface Parser<T>
•
class CSVParser implements Parser<List<Record>>
◦
Inner class InternalBuffer
▪
State
•
INITIALIZED
•
PROGRESSING
•
RELOCATE
•
EXTEND
•
FINALIZED
•
EOF
•
class DefaultFieldParser implement Parser<String>
•
class QuoteFieldParser implement Parser<String>
•
class CommentParser implement Parser<String>
•
CSVParser
◦
InternalBuffer 내의 buf의 getCharAtBegin() == [Quote, comment, default] 구분하여 XXXFieldParser로 위임
◦
InternalBuffer의 상태가 EOF까지 looping
◦
EOF 상태일 경우 List<Record> return
▪
추가 될 수 있는 사항
•
Function<T, R> 을 이용한 형변환
•
Predicate<T>를 이용한 String[] field의 길이 확인 및 문자열 매칭 확인
•
XXXFieldParser
◦
[Field Separator, Line Delimiter]를 매칭하여 String build 이후 pos와 begin swap
◦
Field Separator 발견 - String return
◦
Field Separator 미발견 - EXTEND 요청
◦
Line Delimiter 발견 - String return 및 RELOCATE 요청
◦
Line Delimiter 미발견 - FINALIZED 상태 확인 이후 TRUE 일 경우 pos to begin 까지 String return
▪
DefaultFieldParser - 기본 작업
▪
QuoteFieldParser - 인용구처리에 대한 작업
▪
commentParser - 기본 comment line에 대한 처리
•
InternalBuffer
◦
상태 머신 활용, 자동으로 buf의 pos, begin, limit 위치를 이용하여 확장 및 재배치
고려사항
XXXFieldParser에서 Line Delimiter와 Field Separator 발견시의 요청 옵션이 달라짐. 이를 Optional로 처리해야할지 아니면 InternalBuffer측으로 바로 요청하여 진행하는 것이 좋을지 방법이 고민됨.