2009-09-20 5 views
1

Mon tableau est 140bytes. outArray est 512bytes ... Pas ce que je voulais. Aussi, je ne sais pas si je crypte correctement. Le code ci-dessous est-il correct? comment est-ce que je fixe ceci tellement outArray est la taille réelle et non fixe avec beaucoup de zéros finaux?SevenZip, plusieurs suivis 0s

 var compress = new SevenZipCompressor(); 
     compress.CompressionLevel = CompressionLevel.Ultra; 
     compress.CompressionMethod = CompressionMethod.Lzma; 
     compress.ZipEncryptionMethod = ZipEncryptionMethod.Aes256; 
     var sIn = new MemoryStream(inArray); 
     var sOut = new MemoryStream(); 
     compress.CompressStream(sIn, sOut, "a"); 
     byte[] outArray = sOut.GetBuffer(); 

Répondre

1

De nombreux algorithmes de compression (je ne suis pas familier avec les détails spécifiques pour 7-zip) génèrent des sorties avec une taille de sortie minimale. 7-zip fonctionne mieux sur les grands ensembles de données d'entrée, et 140 octets n'est pas "grand". Vous pourriez faire mieux avec quelque chose comme gzip ou lzo. Quels autres algorithmes de compression avez-vous essayé?

4

Vous obtenez le tampon entier MemoryStream, vous devez utiliser ToArray(),

byte[] outArray = sOut.ToArray(); 

Cela supprime les zéros mais vous pouvez toujours obtenir un plus grand que l'entrée tableau. Il y a une surcharge avec compression/chiffrement, qui est probablement supérieure à 140 octets.

+0

Si je pouvais upvote cette réponse deux fois, je le ferais. –

Questions connexes