Sto provando a usare i flussi deflate/gzip in C# ma sembra che i file dopo la compressione siano più grandi di prima.GZipStream e DeflateStream producono file più grandi
Ad esempio, comprimo un file docx di 900ko, ma ne produce uno 1.4Mo!
E lo fa per ogni file che ho provato.
Forse ho sbagliato nel modo in cui lo sto facendo? Qui è il mio codice:
FileStream input = File.OpenRead(Environment.CurrentDirectory + "/file.docx");
FileStream output = File.OpenWrite(Environment.CurrentDirectory + "/compressedfile.dat");
GZipStream comp = new GZipStream(output, CompressionMode.Compress);
while (input.Position != input.Length)
comp.WriteByte((byte)input.ReadByte());
input.Close();
comp.Close(); // automatically call flush at closing
output.Close();
Ti rendi conto che un metodo di compressione che comprime * qualsiasi arbitraria * ingresso di almeno un byte non può esistere? Quindi, soprattutto se stai provando a comprimere i dati che sono già quasi casuali, ad es. dati precompressi, potresti vedere un aumento delle dimensioni. – Joey
.docx è già compresso utilizzando la compressione ZIP (prova a rinominare in .zip e avere un esplora). Sarei sorpreso se un secondo livello di compressione portasse qualche beneficio. – spender
dovrebbe effettivamente fare solo la compressione sul flush, quindi non dovrebbe cambiare una cosa – kite