首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MemoryStream不能是从FileStream到MemoryStream或类似的expanded...refactoring

MemoryStream不能是从FileStream到MemoryStream或类似的expanded...refactoring
EN

Stack Overflow用户
提问于 2014-11-13 17:35:04
回答 1查看 904关注 0票数 0

我在重构一段代码时遇到了问题。我模糊地理解了这个问题,但是更多的洞察力和解释会对我理解和解决这个问题很有帮助。

首先是原始代码块:

代码语言:javascript
复制
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[]

以下是我重构的代码:

代码语言:javascript
复制
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不能在行上展开

代码语言:javascript
复制
fS.WriteByte((Byte)nrBytesToAdd);

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

代码语言:javascript
复制
MemoryStream ms = new MemoryStream();
ms.WriteByte((Byte)nrBytesToAdd);

我对这一技术的理解表明,这将比将MemoryStream初始化为指定的byte[]要低,但是我不知道(无法找到)另一种动态扩展MemoryStream的方法。一个优点是,现在和预期的未来,byte[]将是非常小的,因此,虽然较慢可能不会对性能产生重大影响。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-13 17:53:36

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

代码语言:javascript
复制
MemoryStream fS = new MemoryStream(_data.Length);

这将设置这个大小的内部字节数组,这样内存流就不必在每次达到大小限制时都继续扩展该数组。它将允许您向内存流中添加字节。虽然不像拥有静态byte[]大小那么有效,但它可能是次好的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26914936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档