2010-04-26 8 views
5

¿Puedo confiar en que los primeros bytes de datos comprimidos usando System.IO.Compression.DeflateStream en .NET siempre son los mismos?¿Cómo puedo saber si una matriz de bytes ya se ha comprimido?

Estos bytes parecen ser siempre el 1er bytes: 237, 189, 7, 96, 28, 73, 150, 37, 38, 47, ...

Asumo esto es una especie de encabezado, me gustaría suponer que este encabezado es fijo y no va a cambiar.

¿Alguien tiene información extra sobre esto?

información de fondo (La razón por la que quiero saber esta información es ...)

que tiene una carga de datos en una tabla de base de datos que podrían hacer con ser hecho más pequeño. He decidido comenzar a comprimir los datos y no voy a molestar en comprimir los datos existentes. Cuando los datos entran en mi código .NET, los datos son una Cadena.

Me gustaría poder ver los primeros bytes de la cadena y ver si se ha comprimido, si es así, necesito descomprimirla.

Originalmente estaba pensando que podía convertir la cadena en bytes y simplemente tratar de descomprimir los datos. Entonces, si ocurre una excepción, podría asumir que no fue comprimida. Pero creo que revisar los bytes del encabezado me daría un mejor rendimiento.

Muchas gracias, Mike G

Respuesta

1

Para estar seguro (a menos que esto está documentado en alguna parte), se adhieren a su propia cabecera de la magia en la parte delantera. Un GUID es una buena opción para esto.

+0

Gracias, creo que voy a ir por este, buen pensamiento lateral! (aún no estoy usando NET 4, por lo que la otra respuesta no se puede usar para mí) – MikeG

0

Se han realizado algunas mejoras en GZipStream realizadas en .NET 4.0 que evitan esto. Tal vez la migración a .NET es una opción para:

algoritmos

La compresión en System.IO.Compression se han mejorado en .NET 4. ya no inflar los datos ya comprimidos DeflateStream y GZipStream. source

Cuestiones relacionadas