2010-04-26 12 views
5

Posso fare affidamento sui primi pochi byte di dati compressi utilizzando System.IO.Compression.DeflateStream in .NET sempre uguale?Come posso sapere se un array di byte è già stato compresso?

Questi byte sembrano essere sempre il 1 ° byte: 237, 189, 7, 96, 28, 73, 150, 37, 38, 47, ...

sto assumendo questo è sorta di intestazione, mi piacerebbe presumere che questa intestazione sia fissa e non cambierà.

Qualcuno ha qualche informazione in più su questo?

informazioni Background (Il motivo che voglio sapere questa informazione è ...)

Ho un carico di dati in una tabella di database che potrebbe fare con l'essere reso più piccolo. Ho deciso che inizierò a comprimere i dati e non mi preoccuperò di comprimere i dati esistenti. Quando i dati entrano nel mio codice .NET, i dati sono una stringa.

Mi piacerebbe essere in grado di guardare i primi pochi byte della stringa e vedere se è stato compresso, se ha quindi ho bisogno di decomprimere.

Inizialmente pensavo di poter convertire la stringa in byte e provare semplicemente a decomprimere i dati. Quindi, se si verifica un'eccezione, posso solo supporre che non sia stata compressa. Ma penso che il controllo dei byte di intestazione mi darebbe prestazioni molto migliori.

Molte grazie, Mike G

risposta

1

di essere al sicuro (a meno che questo è documentato da qualche parte), attaccano la propria intestazione magica nella parte anteriore. Un GUID è una buona scelta per questo.

+0

Grazie, penso che andrò per questo, buon pensiero laterale! (Non sto ancora utilizzando NET 4 quindi l'altra risposta non è utilizzabile per me) – MikeG

0

Sono stati apportati alcuni miglioramenti a GZipStream creati in .NET 4.0 che impediscono questo. Forse migrazione a NET per è un'opzione:

algoritmi

La compressione in System.IO.Compression sono state migliorate NET 4. DeflateStream e GZipStream non più gonfiare dati già compressi. source

Problemi correlati