Alex Rivera | Logout

Most efficient way of reading data from a stream

Asked 2011-09-24T21:30:02.710
28

I have an algorithm for encrypting and decrypting data using symmetric encryption. anyways when I am about to decrypt, I have:

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

I have to read data from the cs CryptoStream and place that data into a array of bytes. So one method could be:

  System.Collections.Generic.List<byte> myListOfBytes = new System.Collections.Generic.List<byte>();

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

another technique could be:

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

I cannot know in advance the length of the stream cs:

enter image description here

or perhaps I should implement my stack class. I will be encrypting a lot of information therefore making this code efficient will save a lot of time

Edit
Report

1 Answer

32

Since you are storing everything in memory anyway you can just use a MemoryStream and CopyTo():

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

CopyTo() will require .NET 4

answered 2011-09-24T21:36:33.380

Your Answer