這是完美的可能和理想,技術性,如果你的寫法不改變文件的長度,並始終落後於讀者,這應該不會給任何問題。事實上,從API的角度來看,這是可取的,因爲這允許用戶控制從哪裏讀取以及在哪裏寫入。 (這是推薦的寫入不同文件的規範,如果在加密過程中發生任何不好的事情,您的輸入文件將不會被混淆)。
喜歡的東西:
protected void Encrypt(Stream input, Stream output)
{
byte[] buffer = new byte[2048];
while (true)
{
// read
int current = input.Read(buffer, 0, buffer.Length);
if (current == 0)
break;
// encrypt
PerformActualEncryption(buffer, 0, current);
// write
output.Write(buffer, 0, current);
}
}
public void Main()
{
using (Stream inputStream = File.Open("file.dat", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (Stream outputStream = File.Open("file.dat", FileMode.Open, FileAccess.Write, FileShare.ReadWrite))
{
Encrypt(inputStream, outputStream);
}
}
現在,因爲你使用的是加密的,我甚至會建議在另一個專門的流進行實際的加密。這很好地清理了代碼。
class MySpecialHashingStream : Stream
{
...
}
protected void Encrypt(Stream input, Stream output)
{
Stream encryptedOutput = new MySpecialHashingStream(output);
input.CopyTo(encryptedOutput);
}
我覺得這很髒。你爲什麼這樣做?也許你可以解釋你的情況? – Matthias 2011-12-28 05:02:38