首页 > 解决方案 > 将 PractRand 与 Java Jar 一起使用

问题描述

我正在尝试使用 PractRand 来测试我的 RandomNumberGenerator 的输出。我的理解是 PractRand 可以从 StdIn 读取字节。

public class App {

public static void main(String[] args) {

    RandomNumberGenerator rng = new RandomNumberGenerator();
    rng.initiateRandomGenerator();

        for (int i = 0; i < 1000000; i++) {
            List<Integer> output = rng.draw(0, 9, 1);
            byte num = output.get(0).byteValue();
            System.out.write(num);
        }

  }
}

接着java -jar target/rng-0.0.1-SNAPSHOT-jar-with-dependencies.jar | ~/Downloads/PractRand/RNG_test stdin64

然而,上述失败是Segmetation fault从 PractRand 给出的。显然我做错了什么,但我不知道是什么。一个可以工作的 cpp 程序是

#include <cstdio>
#include <cstddef>
#include <cstdint>

#include <random>

int main()
{
freopen(NULL, "wb", stdout);  // Only necessary on Windows, but harmless. 

std::mt19937_64 rng(42);
constexpr size_t BUFFER_SIZE = 1024 * 1024 / sizeof(uint64_t);
static uint64_t buffer[BUFFER_SIZE];

while (1) {
    for (size_t i = 0; i < BUFFER_SIZE; ++i)
        buffer[i] = rng();
    fwrite((void*) buffer, sizeof(buffer[0]), BUFFER_SIZE, stdout);
}
}

所以我猜fwritecpp 中的内容与我在 Java 中所做的不同。怎么样?

标签: javarandom

解决方案


推荐阅读