java - 将 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);
}
}
所以我猜fwrite
cpp 中的内容与我在 Java 中所做的不同。怎么样?
解决方案
推荐阅读
- retrofit2 - 使用改造来制作@Post 但在 Kotlin 中发送 xml 正文内容?
- mongodb - 我需要格式化来自 mongodb 关于证书的文本并只获取通用名称
- android - 如何知道我的 Cordova 项目所需的最低 android 版本
- azure-devops - 在 Azure 中构建 Dockerfile 的简单示例
- sparc - 浮点无效寄存器访问
- internet-explorer - IE11 中未定义三个但 Chrome 中未定义
- javascript - 根据预订的时隙将可用时隙数组分成块
- php - Laravel SQS Worker 挂起
- vb.net - 如果仅给出了 .exe 文件的子文件夹路径,则获取该文件的完整路径
- hololens - 表面磁性水平 z 轴旋转问题