Использование 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. Как же?

"Я думаю" не угадывай: направьте вывод программы во что-то вроде xxd, посмотрите, соответствует ли вывод тому, что вы намереваетесь

Andy Turner 18.12.2018 18:42

PractRand? Мы должны знать, что это такое? Очевидно, что код C++ записывает 2 ** 20 = 1048576 случайных байтов в двоичном формате, в то время как ваша программа на Java записывает 1000000-байтовые случайные числа в виде десятичных значений со знаком между -128 и +127. Это должно было быть заметно при минимальных усилиях.

President James K. Polk 19.12.2018 00:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
42
0

Другие вопросы по теме