gpt4 book ai didi

f# - (F#) 从 CryptoStream 读取所有字节的最流畅方式

转载 作者:行者123 更新时间:2023-12-01 07:57:26 25 4
gpt4 key购买 nike

我正在研究使用 AesCryptoServiceProvider 解密二进制数据的过程。对于最后一步,检索解密的数据并将其作为字节数组返回,我目前正在使用以下实现:

let rec streamBytes (s : CryptoStream) (b : int) = seq {
if b >= 0 then
yield byte b
yield! streamBytes s (s.ReadByte()) }
streamBytes cryptoStream (cryptoStream.ReadByte())
|> Seq.toArray

它有效,但对我来说并不“正确”。将 CryptoStream.ReadByte() 的结果作为参数传递给 streamBytes(),然后检查该递归调用中的值似乎有点像 Rube Goldberg-y。有没有更好的方法来做到这一点?

最佳答案

逐字节排出流将非常缓慢。

如果您有 .NET 4.0,那么最直接的方法是:

open System.IO

let readAllBytes (s : Stream) =
let ms = new MemoryStream()
s.CopyTo(ms)
ms.ToArray()

否则您需要手动重现 CopyTo 功能
let readAllBytes (s : Stream) =
let ms = new MemoryStream()
let buf = Array.zeroCreate 8192
let rec impl () =
let read = s.Read(buf, 0, buf.Length)
if read > 0 then
ms.Write(buf, 0, read)
impl ()
impl ()

关于f# - (F#) 从 CryptoStream 读取所有字节的最流畅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6103018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com