我在重构一段代码时遇到了问题。我模糊地理解了这个问题,但是更多的洞察力和解释会对我理解和解决这个问题很有帮助。
首先是原始代码块:
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);最初,我不得不谷歌错误和阅读。这现在是有意义的,因为内存流已被设置为特定大小。我不清楚的是我应该如何进行。我是否创建了另一个未设置为特定大小的MemoryStream对象,从而允许我执行以下操作:
MemoryStream ms = new MemoryStream();
ms.WriteByte((Byte)nrBytesToAdd);我对这一技术的理解表明,这将比将MemoryStream初始化为指定的byte[]要低,但是我不知道(无法找到)另一种动态扩展MemoryStream的方法。一个优点是,现在和预期的未来,byte[]将是非常小的,因此,虽然较慢可能不会对性能产生重大影响。
发布于 2014-11-13 17:53:36
您可以使用具有初始容量的MemeoryStream 构造函数。
MemoryStream fS = new MemoryStream(_data.Length);这将设置这个大小的内部字节数组,这样内存流就不必在每次达到大小限制时都继续扩展该数组。它将允许您向内存流中添加字节。虽然不像拥有静态byte[]大小那么有效,但它可能是次好的事情。
https://stackoverflow.com/questions/26914936
复制相似问题