我有一個問題重構了一段代碼。我隱約明白這個問題,但多一點洞察力或解釋會對我的理解和解決問題很有幫助。MemoryStream不能擴展...從FileStream重構到MemoryStream或類似
首先的原代碼塊:
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[]
都會非常小,所以儘管速度較慢可能不會對性能產生巨大影響。
只要你沒有用特定的'byte []'緩衝區初始化'MemoryStream'就可以調整它的大小(即,除了你在這裏使用它以外的其他方式)。但是你發佈的代碼意義不大,很難知道正確的答案是什麼。 'fsLength%1'總是返回0,所以爲什麼要麻煩?考慮到這一點,你的循環如何做任何事情,因爲'nrBytesToAdd'總是1,所以'i