繁体   English   中英

无法扩展MemoryStream…从FileStream到MemoryStream或类似的重构

[英]MemoryStream cannot be expanded…refactoring from FileStream to MemoryStream or similar

我在重构代码块时遇到问题。 我模糊地理解了问题,但是多一点洞察力和/或解释将对我的理解和解决问题非常有帮助。

首先是原始代码块:

FileStream fS = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite);
Int64 fSLength = fS.Length;
Int64 remainingNotFulEncDecBlock = fSLength % 1;
fS.Seek(0, SeekOrigin.End);
Int64 nrBytesToAdd = 1 - remainingNotFulEncDecBlock;

Byte fillByte = (Byte)'$';

  for (Int32 i = 0; i < nrBytesToAdd - 1; i++)
    fS.WriteByte(fillByte);
    fS.WriteByte((Byte)nrBytesToAdd);
    fSLength = fS.Length;
    fS.Close();

重构的唯一目的是我们不再需要打开物理文件。 相反,我们提供了byte[]

这是我的重构代码:

MemoryStream fS = new MemoryStream(_data);
Int64 fSLength = fS.Length;
Int64 remainingNotFulEncDecBlock = fSLength % 1;
fS.Seek(0, SeekOrigin.End);
Int64 nrBytesToAdd = 1 - remainingNotFulEncDecBlock;

Byte fillByte = (Byte)'$';
  for (Int32 i = 0; i < nrBytesToAdd - 1; i++)
    fS.WriteByte(fillByte);
    fS.WriteByte((Byte)nrBytesToAdd);
    fSLength = fS.Length;
    fS.Close();

上面的代码产生错误MemoryStream不能在行上展开

fS.WriteByte((Byte)nrBytesToAdd);

最初,我不得不向Google搜索错误并进行阅读。 现在这很有意义,因为内存流已设置为特定大小。 我尚不清楚应该如何进行。 我是否创建另一个未设置为特定大小的MemoryStream对象,从而允许我执行以下操作:

MemoryStream ms = new MemoryStream();
ms.WriteByte((Byte)nrBytesToAdd);

我对这项技术的阅读表明,这比将MemoryStream初始化为指定的byte[]性能要差,但是我不知道(找不到)动态扩展MemoryStream另一种方法。 加号的是,现在和可预见的将来, byte[]会很小,因此虽然速度较慢可能不会对性能产生重大影响。

您可以使用具有初始容量的MemeoryStream 构造函数

MemoryStream fS = new MemoryStream(_data.Length);

这将设置该大小的内部字节数组,因此内存流不必在每次达到其大小限制时都继续扩展该数组。 它将允许您将字节添加到内存流。 尽管不如拥有一个静态byte []大小那么有效,但它可能是下一个最好的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM