프로그램이 그에 따라 쓰기/읽는대로 파일을 투명하게 압축/압축하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/755144

문제

매우 큰 텍스트 파일을 읽고 쓰는 프로그램이 있습니다. 그러나 이러한 파일의 형식으로 인해 (이진 데이터 였는지에 대한 ASCII 표현)이 파일은 실제로 매우 쉽게 압축됩니다. 예를 들어, 이러한 파일 중 일부는 크기가 10GB 이상이지만 GZIP의 크기는 95% 압축을 달성합니다.

프로그램을 수정할 수는 없지만 디스크 공간은 소중합니다. 따라서이 파일이 투명하게 압축되고 압축 압축되는 동안이 파일을 읽고 쓸 수있는 방법을 설정해야합니다.

이 프로그램은 파일 만 읽고 쓸 수 있으므로 이해하는 한 입력 및 출력 모두에 대한 이름의 파이프를 설정해야합니다. 어떤 사람들은 대신 압축 파일 시스템을 제안하고 있습니다. 두 작업을하려면 어떻게해야합니까?

기술 정보 : 저는 현대적인 리눅스에 있습니다. 프로그램은 별도의 입력 및 출력 파일을 읽습니다. 입력 파일을 통해 순서대로 읽습니다. 출력 파일을 순서대로 씁니다.

도움이 되었습니까?

해결책

zlibc를 확인하십시오 : http://zlibc.linux.lu/.

또한 퓨즈가 옵션 인 경우 (예 : 커널이 너무 오래되지 않았습니다) 고려하십시오 : 컴퓨터 http://www.biggerbytes.be/

다른 팁

Btrfs :

https://btrfs.wiki.kernel.org/index.php/main_page

요즘 매우 빠른 "자동 투명 압축/감압"을 지원하며 새로운 커널에 (실험적이지만) 존재합니다.

이름이 지정된 파이프는 전체 이중 작업을 제공하지 않으므로 파일 이름을 하나만 제공 해야하는 경우 조금 더 복잡해집니다.

응용 프로그램이 파일을 통해 찾아야하는지 알고 있습니까?

응용 프로그램이 Stdin, Stdout과 함께 작동합니까?

아마도 솔루션은 파일에 디렉토리 만 포함 된 미니 압축 파일 시스템을 만드는 것일 수 있습니다.

별도의 입력 및 출력 파일이 있으므로 다음을 수행 할 수 있습니다.

mkfifo readfifo
mkfifo writefifo
zcat your inputfile > readfifo &
gzip writefifo > youroutputfile &

launch your program !

ZCAT가 입력 파일을 읽으면 입력 파일을 읽으면 SIGPIPE 신호가 표시되므로 입력 순서대로 두 번 읽기에 문제가 발생할 것입니다.

적절한 솔루션은 아마도 Compfuse와 같은 압축 파일 시스템을 사용하는 것입니다. 따라서 Seek와 같은 지원되지 않는 작업에 대해 걱정할 필요가 없기 때문입니다.

어떤 언어를 사용하고 있습니까?

Java를 사용하는 경우 API 문서에서 GzipinputStream 및 GzipoutputStream 클래스를 살펴보십시오.

C/C ++를 사용하는 경우 ZLIBC가 아마도 가장 좋은 방법 일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top