MemoryStream的byte []缓冲区可以变化吗?

isp*_*iro 2 c# serialization memorystream base-class-library

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

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

有什么方法可以'serialized'根据大小来设定增长stuffToSerialize

Jon*_*nna 8

无参数构造函数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();
}
Run Code Online (Sandbox Code Playgroud)