장면 설명:
으아악지금 문제는 수신되는 것이 완전한 압축 파일이 아니라 블록 바이너리 데이터이기 때문에 불완전한 정보로 인해 수신된 데이터의 압축을 풀 수 없다는 것입니다
이제 다음과 같은 기능을 구현하고 싶습니다. 먼저 수신된 스트림 데이터의 압축을 풀고 이를 완전한 데이터로 복원합니다(원본 로그 데이터는 줄 바꿈으로 구분됩니다. 각 스트림 데이터를 압축하기 전에 텍스트와 오프셋을 가져오는 것이 좋을 것입니다) 해당 파일)을 저장하고, 전송 및 저장 등의 과정에서 데이터 오류가 발생할 수 있다는 점을 고려하여 각 데이터 스트림마다 오류 발생 시 최대한 많은 데이터를 압축 해제합니다.
관련 코드의 일부는 다음과 같습니다: (https://stackoverflow.com/que...에서 수정됨)
으아악i>=3이면 루프에서 매번 오류가 보고됩니다.
제 결론은 스트림이 불연속적이면(데이터의 일부를 수신하기 위해 건너뛰기) 후속 데이터의 압축을 풀 수 없다는 것입니다.
질문 1: 수신된 데이터의 각 부분을 어떻게 올바르게 압축 해제할 수 있나요? (gzip 압축의 알고리즘과 데이터 구조에 관련될 수 있기 때문에 관련 코드를 살펴보고 있습니다. 전송 헤더에 특정 척을 추가하거나 압축을 풀어야 하는 데이터 전후에 일부 척을 추가하면 문제가 해결될 수 있습니다. , 고려해 볼 수 있습니다)
질문 2 :
수신된 데이터의 모든 부분을 올바르게 압축 해제할 수 없다면 어떻게 최대한 많은 데이터를 압축 해제할 수 있습니까?
오류 발생 시 전송을 재개하는 기능을 만들 수 있을 것 같습니다. 전송하기 전에 현재 데이터 스트림을 백업해두어야 합니다. 이를 위해서는 송신기와 수신기 사이의 전송 프로토콜을 변경할 수 있어야 합니다. 오류가 발생하면 실패가 송신기에 즉시 보고되며, 오류가 없으면 전송이 재개됩니다. 보고되고 다음 섹션이 전송됩니다. 이는 데이터 무결성을 보장합니다. 파일이 너무 큰 경우 메모리에 더 많은 데이터 세그먼트를 백업하고 세부적인 판단을 내릴 수 있습니다.
설명한 문제가 확실하지 않지만 stackoverflow에 대한 몇 가지 질문과 답변이 도움이 될 수 있습니다.
zlib로 gzip 스트림의 압축을 어떻게 풀 수 있나요?
Gzip을 청크 단위로 압축 해제하는 Python