C#中流的读取方式总结

24 阅读1分钟

在处理一个加解密问题的时候, 总结了以下对流的处理

1. 通过循环单字节读取

using (CryptoStream cs = new CryptoStream(cipherMs, decryptor, CryptoStreamMode.Read))
{
    byte[] decryptBytes = new byte[cipherText.Length];
    for (int i = 0; i < decryptBytes.Length; i++)
    {
        decryptBytes[i] = (byte)cs.ReadByte();
    }
}

2. 通过MemoryStream读取

using (CryptoStream cs = new CryptoStream(cipherMs, decryptor, CryptoStreamMode.Read))
{
    using var resultMs = new MemoryStream();
    cs.CopyTo(resultMs);
    return resultMs.ToArray();
}

3. 通过Stream.Read方法读取

using (CryptoStream cs = new CryptoStream(cipherMs, decryptor, CryptoStreamMode.Read))
{
    byte[] decryptBytes = new byte[cipherText.Length];
    cs.Read(decryptBytes, 0, decryptBytes.Length);
}

4. CryptoStream在使用Read方法读取不完整的问题

微软官方文档的解释

所以在使用CryptoStream的时候, 不可以使用第三种所讲的方式读取内容, 推荐的做法是第二种读取.