我正在尝试将非常大的对象直接序列化到zip流中。我通过在中间步骤将其序列化到文件流中,重新加载它,然后压缩它来实现此目标。
我还尝试直接压缩到内存流中,并且它也可以工作。但当我使用GZipStream时,总是留下一个“未完成”的对象,数据存在并且格式正确,只是在意料之外地结束了。
这不是因为缓冲区刷新不足,因为我已经尝试过刷新一切。
简化的示例代码:
谢谢。
我还尝试直接压缩到内存流中,并且它也可以工作。但当我使用GZipStream时,总是留下一个“未完成”的对象,数据存在并且格式正确,只是在意料之外地结束了。
这不是因为缓冲区刷新不足,因为我已经尝试过刷新一切。
简化的示例代码:
internal static byte[] SerializeAndCompress(object objectToSerialize)
{
using(var memStream = new MemoryStream())
using (var zipStream = new GZipStream(memStream, CompressionMode.Compress, true))
using (var streamWriter = new StreamWriter(zipStream))
using (var jsonWriter = new JsonTextWriter(streamWriter))
{
var jsonSerializer = new JsonSerializer { ContractResolver = new CamelCasePropertyNamesContractResolver(), Formatting = Newtonsoft.Json.Formatting.None };
jsonSerializer.Serialize(jsonWriter, objectToSerialize);
jsonWriter.Flush();
return memStream.ToArray();
}
}
谢谢。