Search

2025-03-04

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측으로 바로 요청하여 진행하는 것이 좋을지 방법이 고민됨.