gpt4 book ai didi

go - 我可以在不创建 n 大小的缓冲区的情况下只读取文件的 n 个字节吗?

转载 作者:IT王子 更新时间:2023-10-29 01:26:27 24 4
gpt4 key购买 nike

我正在检测非常大的 (30+ GB) 文件是否相同。与其对所有 30 GB 进行哈希处理,我想我应该对第一个兆字节进行哈希处理,然后是从 10% 开始的兆字节到文件中,然后是从 20% 开始的兆字节到文件中,依此类推。检测 1000 万字节是否相同足以满足我的目的。

在 Ruby 或 JavaScript 中,当我这样做时,我只是创建一个 10 MB 的缓冲区,将 1 MB 读入其中,在文件中向前查找,将另外 1 MB 读入缓冲区,向前查找,等等,然后散列缓冲区。

在 Go 中,我对如何执行此操作感到有点困惑,因为 ReadReadFullReadAtLeast 等函数似乎都是将缓冲区作为参数,然后读取直到填满它。所以我可以分配 11 个单独的缓冲区,用单独的 1 MB block 填充 10 个,然后将它们连接到最后一个进行散列......但这看起来非常低效和浪费。我确定我遗漏了一些东西,但搜索文档只会让我更加困惑。 Go 中这个问题的合适解决方案是什么?我可以简单地要求将 n 个字节读入预先存在的缓冲区吗?

最佳答案

您可以对传递给ReadReadFull[]byte 缓冲区进行 slice 。

“slice ” slice 指向同一个后备数组,因此分配完整的缓冲区,并就地 slice :

r.Read(buf[i : i+chunkSize])

io.ReadFull(r, buf[i:i+chunkSize])

https://play.golang.org/p/Uj626v-GE6

关于go - 我可以在不创建 n 大小的缓冲区的情况下只读取文件的 n 个字节吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45222251/

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