본문 바로가기
Java/POI

POI #1 [ POIFSFileSystem vs OPCPackage ]

by Lee David 2020. 6. 29.
반응형

OLE와 OOXML

문서 표준 규격에 따르면 여러가지 문서들이 즐비해 있겠지만 가장 많은 비중을 차지하는 두가지 포맷에

(OLE와 OOXML) 관련하여 정리하겠습니다.

 

POI에서 위에 명시된 두개의 파일 포맷을 읽어 들이기 위해서 사용하는 두가지 라이브러리가 있는데요.

  • OLE (97~2003) - POIFSFileSystem
  • OOXML - OPCPackage

크게 두개로 나뉘고 OLE의 Stream을 읽어 들인다와 OOXML 내부의 xml + 여러 파일을 읽어 들이는데 차이가 있습니다.

 

두개의 파일 모두 아래와 같은 내용을 가지고 있지만 용량에서 차이가 납니다.
위 두개 파일의 내부는 동일합니다.

그러면 내부를 좀 더 살펴 보겠습니다.

왼쪽이 OLE, 오른쪽이 OOXML

두개 파일의 차이점이 확연히 들어납니다.

어떻게 보면 OLE 파일이 더 간단한것 같지만 위에서와 같이 하드디스크 용량을 따진다면

OOXML이 더 효율적일 것 입니다.

 

왼쪽에 나타나는 OLE 내부의 Stream의 "크기" 항목과 "압축된 크기" 항목은 용량 크기가 거의 비슷하지만 오른쪽에 보여지는 내용은 위의 명시한 내용을 설명해 줍니다.

 

그러면 위의 api 활용법을 간단하게 정리하겠습니다.

  • POIFSFileSystem
POIFSFileSystem fileSystem = new POIFSFileSystem(인풋스트림);
DirectoryNode dirNode = fileSystem.getRoot();

dirNode에는 위에서 본 Workbook등의 Stream이 객체 형태로 파싱 됩니다.

 

  • OPCPackage
OPCPackage package = OPCPackage.open(파일 경로);
List<PackagePart> packageList = package.getParts();

 

packageList에는 위에서 설명한 폴더 경로 및 내부 xml 파일들이 객체 형태로 파싱 됩니다.

 

 

poi를 사용하시면서 문제가 있거나 궁금한점은 댓글 남겨주시면 답변 드리겠습니다.

반응형

'Java > POI' 카테고리의 다른 글

POI #3 [XSSFWorkbook - Memory Leak]  (0) 2020.07.10
POI #2 [HSSFWorkbook - write & read]  (0) 2020.06.30
POI #0  (0) 2020.06.26