Estoy intentando comprimir una gran cantidad de datos, a veces en la región de 100 GB, cuando ejecuto la rutina que he escrito, parece que el archivo sale exactamente del mismo tamaño que el tamaño anterior. ¿Alguien más ha tenido este problema con GZipStream?GZipStream en datos grandes
Mi código es el siguiente:
byte[] buffer = BitConverter.GetBytes(StreamSize);
FileStream LocalUnCompressedFS = File.OpenWrite(ldiFileName);
LocalUnCompressedFS.Write(buffer, 0, buffer.Length);
GZipStream LocalFS = new GZipStream(LocalUnCompressedFS, CompressionMode.Compress);
buffer = new byte[WriteBlock];
UInt64 WrittenBytes = 0;
while (WrittenBytes + WriteBlock < StreamSize)
{
fromStream.Read(buffer, 0, (int)WriteBlock);
LocalFS.Write(buffer, 0, (int)WriteBlock);
WrittenBytes += WriteBlock;
OnLDIFileProgress(WrittenBytes, StreamSize);
if (Cancel)
break;
}
if (!Cancel)
{
double bytesleft = StreamSize - WrittenBytes;
fromStream.Read(buffer, 0, (int)bytesleft);
LocalFS.Write(buffer, 0, (int)bytesleft);
WrittenBytes += (uint)bytesleft;
OnLDIFileProgress(WrittenBytes, StreamSize);
}
LocalFS.Close();
fromStream.Close();
El StreamSize es un valor UInt64 8 bytes que contiene el tamaño del archivo. Escribo estos 8 bytes sin formato al inicio del archivo, así sé el tamaño original del archivo. Writeblock tiene el valor de 32kb (32768 bytes). fromStream es la transmisión de datos, en este caso, FileStream. ¿Los 8 bytes frente a los datos comprimidos van a causar un problema?
¿Trabaja su código en archivos más pequeños? –
¿Puedes confirmar que tu código comprime correctamente conjuntos de datos más pequeños? Un archivo de texto, por ejemplo, normalmente se comprime bien ... – Nik