2016-11-20 3 views
0

GzipStream에 사용 된 압축 파일의 크기를 어떻게 알 수 있습니까? 헤더와 접미사가 있다는 것을 알고 있습니다. 첫 번째 10 바이트 - 헤더, 두 번째 8 바이트 - 접미사입니다. 접미어에서 크기 파일을 어떻게 알 수 있습니까?Gzipstream 헤더 및 접미어

답변

-1

파일의 마지막 4 바이트에는 압축되지 않은 파일 크기가 들어 있습니다.

RandomAccessFile raf = new RandomAccessFile(yourGzipFile, "r"); 
raf.seek(raf.length() - 4); 
int b4 = raf.read(); 
int b3 = raf.read(); 
int b2 = raf.read(); 
int b1 = raf.read(); 
int filesize = (b1 << 24) | (b2 << 16) + (b3 << 8) + b4; 
raf.close(); 

filesize은 파일 크기가 포함됩니다

this post에 따르면, 다음 코드는 당신에게 파일의 크기를 줄 것이다.

편집 : 사과, 위의 코드는 위의 코드는 Java 용이지만 위의 코드는 올바른 경로에 놓여 있습니다.

행운을 빈다. 아래 투표를 제거 할 수 있도록

---- 편집 ---- @gusman에 의해 코멘트 당으로

, 나는이 댓글을 편집하고 있습니다. 대체 코드 예는 my other answer below을 참조하십시오.

+0

이 설명하시기 바랍니다 여기

GZipStream에 의해 사용되는 압축 파일의 크기를 얻을 수있는 Gzip으로가 포함 압축 해제의 C# Decompress 기능의 예입니다 학년 등급 표시? 감사합니다 – WizzKidd

+0

그것은 자바, C#을하지 않습니다. 경우에 따라 C# 및 Java는 java와 C# 또는 C#에서 Java에 대해 매우 유사하고 수용 가능하지만이 경우 코드가 완전히 다릅니다. – Gusman

+1

답변을 수정하고 이에 대한 다른 응답을 배치하면 나는 부정적인 표결을 제거합니다. 사용자가 답변을 수정하지 않으면 제거 할 수 없습니다. 그것을 허용하지 않습니다. – Gusman

0

자바를 사용한 예이기 때문에 이전 답변에 투표를 거절 한 것으로 나타났습니다. 원칙은 여전히 ​​동일하므로 질문에 대한 대답은 마지막 4 바이트에 필요한 정보가 포함되어 있다는 것입니다. 바라기를이 응답은 당신이 인 무슨이다. 조금 더 나은 기록

static public byte[] Decompress(byte[] b) 
{ 
    MemoryStream ms = new MemoryStream(b.length); 
    ms.Write(b, 0, b.Length); 
    //last 4 bytes of GZipStream = length of decompressed data 
    ms.Seek(-4, SeekOrigin.Current); 
    byte[] lb = new byte[4]; 
    ms.Read(lb, 0, 4); 
    int len = BitConverter.ToInt32(lb, 0); 
    ms.Seek(0, SeekOrigin.Begin); 
    byte[] ob = new byte[len]; 
    GZipStream zs = new GZipStream(ms, CompressionMode.Decompress); 
    zs.Read(ob, 0, len); 
    returen ob; 
} 
0

뭔가 :

public int GetUncompressedSize(string FileName) 
{ 
    using(BinaryReader br = new BinaryReader(File.OpenRead(pathToFile)) 
    { 
     br.BaseStream.Seek(SeekOrigin.End, -4); 
     return br.ReadInt32(); 
    } 
}