c# - MemoryStream 的 byte[] 缓冲区可以有可变大小吗?

标签 c# serialization memorystream base-class-library

我正在使用 MemoryStream 将对象序列化为 byte[]:

byte[] serialized = new byte[1000];
using (MemoryStream stream = new MemoryStream(serialized))
    using (TextWriter textWriter = new StreamWriter(stream))
        serializer.Serialize(textWriter, stuffToSerialize);

有什么方法可以设置'serialized' 根据stuffToSerialize 的大小增长吗?

最佳答案

无参数构造函数 new MemoryStream() 使用一个。

然后将其序列化,然后当您需要 byte[] 调用 ToArray() 时,它会创建实际使用的任何长度缓冲区的副本(内部缓冲区通常在任何时候都会有一些不断增长的空间,这通常是不可取的,ToArray() 为您提供了您真正关心的内容。

在以下代码的末尾,如果您能够预测正确的尺寸,它将具有与您的代码相同的效果:

byte[] serialized;
using (MemoryStream stream = new MemoryStream())
{
  using (TextWriter textWriter = new StreamWriter(stream))
  {
    serializer.Serialize(textWriter, stuffToSerialize);
  }
  // Note: you can even call stream.Close here is you are paranoid enough
  // - ToArray/GetBuffer work on disposed MemoryStream objects.
  serialized = stream.ToArray();
}

关于c# - MemoryStream 的 byte[] 缓冲区可以有可变大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12309107/

相关文章:

c# - 从二进制形式转换 float NaN 值,反之亦然会导致不匹配

c# - 在 C# 中,我无法将 XML 反序列化为对象

c# - WCF CultureInfo 类型化 DataMember 序列化 CommunicationException

c# - 您如何知道何时通过 XML 序列化加载?

c# - 如何判断一个内存流是否被正确填充

c# - "Multiple filters matched."在 WCF 中对多个终结点使用相同的地址

c# - 将 JSON 反序列化为多个继承类

c# - 内存流和文件流的区别

c# - byte[] 的图像无限期挂起

c# - 将一些 LISP 转换为 C#