从流中读取数据的最有效方法

我有一个使用对称加密来加密和解密数据的算法。 无论如何,当我要解密时,我有:

CryptoStream cs = new CryptoStream(ms, cryptoTransform, CryptoStreamMode.Read); 

我必须从cs CryptoStream中读取数据并将该数据放入一个字节数组中。 所以一种方法可能是:

  System.Collections.Generic.List myListOfBytes = new System.Collections.Generic.List(); while (true) { int nextByte = cs.ReadByte(); if (nextByte == -1) break; myListOfBytes.Add((Byte)nextByte); } return myListOfBytes.ToArray(); 

另一种技术可能是:

 ArrayList chuncks = new ArrayList(); byte[] tempContainer = new byte[1048576]; int tempBytes = 0; while (tempBytes < 1048576) { tempBytes = cs.Read(tempContainer, 0, tempContainer.Length); //tempBytes is the number of bytes read from cs stream. those bytes are placed // on the tempContainer array chuncks.Add(tempContainer); } // later do a for each loop on chunks and add those bytes 

我事先无法知道流cs的长度:

在此处输入图像描述

或者我应该实现我的堆栈类。 我将加密大量信息,因此使代码高效将节省大量时间

你可以阅读大块的内容:

 using (var stream = new MemoryStream()) { byte[] buffer = new byte[2048]; // read in chunks of 2KB int bytesRead; while((bytesRead = cs.Read(buffer, 0, buffer.Length)) > 0) { stream.Write(buffer, 0, bytesRead); } byte[] result = stream.ToArray(); // TODO: do something with the result } 

由于您将所有内容存储在内存中,您只需使用MemoryStreamCopyTo()

 using (MemoryStream ms = new MemoryStream()) { cs.CopyTo(ms); return ms.ToArray(); } 

CopyTo()将需要.NET 4