GzipStream에 사용 된 압축 파일의 크기를 어떻게 알 수 있습니까? 헤더와 접미사가 있다는 것을 알고 있습니다. 첫 번째 10 바이트 - 헤더, 두 번째 8 바이트 - 접미사입니다. 접미어에서 크기 파일을 어떻게 알 수 있습니까?Gzipstream 헤더 및 접미어
0
A
답변
-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
자바를 사용한 예이기 때문에 이전 답변에 투표를 거절 한 것으로 나타났습니다. 원칙은 여전히 동일하므로 질문에 대한 대답은 마지막 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();
}
}
이 설명하시기 바랍니다 여기
은GZipStream
에 의해 사용되는 압축 파일의 크기를 얻을 수있는 Gzip으로가 포함 압축 해제의 C#Decompress
기능의 예입니다 학년 등급 표시? 감사합니다 – WizzKidd그것은 자바, C#을하지 않습니다. 경우에 따라 C# 및 Java는 java와 C# 또는 C#에서 Java에 대해 매우 유사하고 수용 가능하지만이 경우 코드가 완전히 다릅니다. – Gusman
답변을 수정하고 이에 대한 다른 응답을 배치하면 나는 부정적인 표결을 제거합니다. 사용자가 답변을 수정하지 않으면 제거 할 수 없습니다. 그것을 허용하지 않습니다. – Gusman