Xin cảm ơn bạn đã nhập ý kiến của mọi người. Nó chỉ ra lỗi được gây ra bởi một sai lầm trong phương pháp mã hóa. Phương pháp là
/// <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());
}
}
}
Đường trả về phải dưới mức sử dụng cho phép luồng nén đóng và xả, điều này gây ra hành vi không nhất quán khi giải nén luồng.
/// <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());
}
}
Cảm ơn sự giúp đỡ của mọi người.
Nguồn
2010-08-10 15:06:43
Bản sao đầu tiên không điền luồng; có được hành vi tương tự với phương pháp đọc. Các GZipStream là một lớp Microsoft surly không có một lỗi trong lớp học? –
Hmm là bạn chắc chắn 100%. Đọc là một vấn đề khác hoàn toàn hợp đồng trên phương pháp đọc nói rằng nó không đảm bảo trả về số byte yêu cầu nhưng tài liệu CopyTo không đưa ra yêu cầu tương tự, nhưng có lẽ nó sử dụng phương thức Read trong nội bộ. Bạn đã thử sử dụng nó trong một vòng lặp cũ cho mỗi ví dụ trên trang Stream.Read MSDN http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx –
Ya bắt đầu với một vòng lặp , cuộc gọi đầu tiên để đọc trả về 0, các cuộc gọi tiếp theo để đọc byte trả về cho đến khi kết thúc. –