我快要失去我该死的头脑了。在过去的一个小时里,我一直试图让 GzipStream 压缩一个字符串,但无论出于何种原因,它都拒绝将整个字节数组写入内存流。起初我认为它与 using 语句有关,但即使在删除它们之后,它似乎也没有什么不同。
初始配置:
var str = "Here is a relatively simple string to compress";
byte[] compressedBytes;
string returnedData;
var bytes = Encoding.UTF8.GetBytes(str);
正常工作(写入 64 长度字节数组):
using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream()) {
using (var gs = new GZipStream(mso, CompressionMode.Compress)) {
msi.CopyTo(gs);
}
compressedBytes = mso.ToArray();
}
失败(写入 10 个长度的字节数组):
using(var mso = new MemoryStream())
using(var msi = new MemoryStream(bytes))
using(var zip = new GZipStream(mso, CompressionMode.Compress))
{
msi.CopyTo(zip);
compressedBytes = mso.ToArray();
}
也失败(写入 10 个长度字节数组):
var mso = new MemoryStream();
var msi = new MemoryStream(bytes);
var zip = new GZipStream(mso, CompressionMode.Compress);
msi.CopyTo(zip);
compressedBytes = mso.ToArray();
有人可以解释为什么第一个有效,但在另外两个中我得到这些不完整的数组?有什么东西从我下面被处理掉了吗?就此而言,有没有办法让我避免使用两个内存流?
谢谢,Zoombini