Tengo un algoritmo para encriptar y descifrar datos utilizando encriptación simétrica. de todos modos, cuando estoy a punto de descifrar, que tengo:La forma más eficiente de leer datos de una secuencia
CryptoStream cs = new CryptoStream(ms, cryptoTransform, CryptoStreamMode.Read);
tengo que leer los datos de la CS CryptoStream y colocar esos datos en una matriz de bytes. Así que un método podría ser:
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();
otra técnica podría ser:
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
no puedo saber de antemano la duración de la corriente CS:
O quizá debería implementar mi clase de pila Voy a la encriptación de una gran cantidad de información, por lo tanto haciendo de este código eficiente ahorrará mucho tiempo
gracias agradables que era exactamente lo que necesitaba! –
pregunta rápida ... ¿por qué colocaste todo dentro de la instrucción using? ¿Qué significa la declaración de uso? –
@Tono Nam, garantiza que el método Dispose de recursos IDisposable, como Streams, siempre se invoca para liberar todos los recursos no administrados que puedan tener, incluso en el caso de una excepción, y así evitar fugas de memoria en el código. Ese es un concepto fundamental sobre el que los invito a leer en MSDN: http://msdn.microsoft.com/en-us/library/yh598w02.aspx. También debe incluir su 'CryptoStream' en una sentencia using. –