我希望能够并行读取或写入大文件,或者如果不是并行读取,至少要分块写入,这样才不会占用太多内存。并行读取和写入
这是我当前的代码:
// Define memory stream which will be used to hold encrypted data.
MemoryStream memoryStream = new MemoryStream();
// Define cryptographic stream (always use Write mode for encryption).
CryptoStream cryptoStream = new CryptoStream(memoryStream,
encryptor,
CryptoStreamMode.Write);
//start encrypting
using (BinaryReader reader = new BinaryReader(File.Open(fileIn, FileMode.Open))) {
byte[] buffer = new byte[1024 * 1024];
int read = 0;
do {
read = reader.Read(buffer, 0, buffer.Length);
cryptoStream.Write(buffer, 0, read);
} while (read == buffer.Length);
}
// Finish encrypting.
cryptoStream.FlushFinalBlock();
// Convert our encrypted data from a memory stream into a byte array.
//byte[] cipherTextBytes = memoryStream.ToArray();
//write our memory stream to a file
memoryStream.Position = 0;
using (BinaryWriter writer = new BinaryWriter(File.Open(fileOut, FileMode.Create))) {
byte[] buffer = new byte[1024 * 1024];
int read = 0;
do {
read = memoryStream.Read(buffer, 0, buffer.Length);
writer.Write(buffer, 0, read);
} while (read == buffer.Length);
}
// Close both streams.
memoryStream.Close();
cryptoStream.Close();
正如你可以看到,它读取整个文件到内存中,对其进行加密,然后把它写到。如果我正在加密非常大(2GB以上)的文件,它往往不起作用,或者至少会占用我内存的大约97%。
我该如何更有效地做到这一点?
您不能更有效地维护加密。 – SLaks 2010-05-25 18:00:59
加密后,我不能一次写出几个数据块吗? – Malfist 2010-05-25 18:02:44
除非您使用ECB(这是不安全的),否则每个块都取决于所有前面的块。 – SLaks 2010-05-25 18:11:49