之前的问题是将二进制编码Int32为一个Int64[ C# - 从两个Int32中创建一个Int64
问题:如何将一个解码Int64回两个Int32?
我想要生成大量 (10 TB) 看似随机但可预测的数字。生成速度应该超过快速SSD,所以我想要3000 MB/s到4000 MB/s。
文件写入后,将再次读取数字并重新生成,以便进行比较。整个程序应该检查磁盘。
目前我正在考虑哈希。为了可预测性,要散列的数据只是一个 8 字节数字 ( ulong)。所以在二进制文件中它看起来像这样
<32 bytes of SHA256(0)> <32 bytes of SHA256(1)> ...
Run Code Online (Sandbox Code Playgroud)
我不认为我可以使用带种子的随机数生成器,因为我无法告诉随机数生成器生成第n个数字。但我可以告诉 SHA256 算法计算 SHA256(n)。
我使用 SHA256 算法对 128 MB 数据进行了测试,如下所示:
Parallel.For(0, 128 * 1024 * 1024 / 32, // 128 MB / length of the hash
a => {
var sha = SHA256.Create();
sha.Initialize();
var ba = new byte[8];
ba[0] = (byte)((long)a >> 0 & 0xFF);
ba[1] = (byte)((long)a >> 8 & 0xFF);
ba[2] = (byte)((long)a …Run Code Online (Sandbox Code Playgroud)