Story
Во время эксперимента я сохранял поток случайных байтов, сгенерированных аппаратным устройством 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) , все еще является двоичнымоднако он примерно в 2 раза больше файла, сохраненного методом A) . Дальнейший анализ показывает, что поток случайных битов значительно меньше случайных.
Резюме
Я подозреваю, что метод сохранения B) добавляет что-то почти к каждому байту, однакопонимание этого лежит в основе моего опыта в Java / Scala I / O.
Я был бы очень признателен, если бы кто-нибудь объяснил мне разницу в низком уровне между методами A) и B) . Цель состоит в том, чтобы отменить изменения, созданные методом сохранения B) и получить исходный поток случайных байтов.
Заранее большое спасибо!