故事
在进行实验时,我正在保存由硬件 RNG 设备生成的随机字节流。实验完成后,我意识到保存方法不正确。我希望我能找到修复损坏文件的方法,以便获得正确的随机数流。
例子
这个问题的故事可以用下面的简单例子来解释。
假设我在输入文件中有一个随机数流randomInput.bin
。我将通过将输入文件发送到标准输出来模拟来自硬件 RNG 设备的随机数流cat
。我找到了两种方法如何将此流保存到文件中:
A) 无害保存方法
这个方法给了我原始的随机字节流。
import scala.sys.process._
import java.io.File
val res = ("cat randomInput.bin" #> new File(outputFile))!
B)导致腐败的保存方法
不幸的是,这是我选择的原始保存方法。
import scala.sys.process._
import java.io.PrintWriter
val randomBits = "cat randomInput.bin".!!
val out = new PrintWriter(outputFile)
out.println(randomBits)
if (out != null) {
out.close()
Seq("chmod", "600", outputFile).!
}
使用方法B)保存的文件仍然是二进制文件,但是大约是方法A)保存的文件的 2 倍。进一步分析表明,随机位流的随机性明显降低。
概括
我怀疑保存方法B)几乎为每个字节添加了一些内容,但是,对此的理解是我在 Java/Scala I/O 方面的专业知识的背后。
如果有人向我解释方法A)和B)之间的低级差异,我将不胜感激。目标是还原通过保存方法B)创建的更改并获得原始随机字节流。
非常感谢您!