Hola gracias por la contribución de todos. Resulta que el error fue causado por un error en el método de codificación. El método era
/// <summary>
/// Compress file data and then base64s the compressed data for safe transportation in XML.
/// </summary>
/// <returns>Base64 string of file chunk</returns>
private string GetFileChunk()
{
// MemoryStream for compression output
using (MemoryStream compressed = new MemoryStream())
{
using (GZipStream zip = new GZipStream(compressed, CompressionMode.Compress))
{
// read chunk from file
byte[] plaintext = new byte[this.readSize];
int read = this.file.Read(plaintext, 0, plaintext.Length);
// write chunk to compreesion
zip.Write(plaintext, 0, read);
plaintext = null;
// Base64 compressed data
return Convert.ToBase64String(compressed.ToArray());
}
}
}
La línea de retorno debe ser inferior a la usando permitiendo que la corriente de compresión para cerrar y al ras, esto hizo que el comportamiento incoherente al descomprimir la corriente.
/// <summary>
/// Compress file data and then base64s the compressed data for safe transportation in XML.
/// </summary>
/// <returns>Base64 string of file chunk</returns>
private string GetFileChunk()
{
// MemoryStream for compression output
using (MemoryStream compressed = new MemoryStream())
{
using (GZipStream zip = new GZipStream(compressed, CompressionMode.Compress))
{
// read chunk from file
byte[] plaintext = new byte[this.readSize];
int read = this.file.Read(plaintext, 0, plaintext.Length);
// write chunk to compreesion
zip.Write(plaintext, 0, read);
plaintext = null;
}
// Base64 compressed data
return Convert.ToBase64String(compressed.ToArray());
}
}
Gracias por la ayuda de todos.
La primera copia no rellena la secuencia; obtener el mismo comportamiento con el método de lectura. El GZipStream es un tipo de clase de Microsoft, ¿no hay un error en su clase? –
Hmm ¿estás 100% seguro? Leer es una cuestión completamente diferente, el contrato en el método de lectura dice que no se garantiza que devuelva la cantidad de bytes solicitados, pero la documentación de CopyTo no hace el mismo reclamo, pero quizás usa el método Read internamente. ¿Ha intentado usarlo en un ciclo ex por el ejemplo en la página Stream.Read MSDN http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx –
Ya comenzó con un ciclo , la primera llamada para leer devuelve 0, llamadas posteriores para leer bytes de retorno hasta el final. –