使用java我想在一个程序中生成一些随机值,然后在每次执行第二个程序时在其他程序中使用这些值。
这样做的目的是生成一次随机值,然后保持并保持它们在以后的每次运行中保持不变。有可能吗?感谢
答案 0 :(得分:4)
退出程序时,任何未存储在文件中的内容都将丢失。
我怀疑你不需要像你想象的那样担心IO。您应该能够在几毫秒内读取数百万个值。实际上,您应该能够在几分之一秒内生成数百万个随机数。
Random random = new Random(1);
long start = System.nanoTime();
int values = 1000000;
for (int i = 0; i < values; i++)
random.nextInt();
long time = System.nanoTime() - start;
System.out.printf("Took %.3f seconds to generate %,d values%n",
time / 1e9, values);
打印
Took 0.015 seconds to generate 1,000,000 values
生成和编写
int values = 1000000;
ByteBuffer buffer = ByteBuffer.allocateDirect(4 * values).order(ByteOrder.nativeOrder());
Random random = new Random(1);
long start = System.nanoTime();
for (int i = 0; i < values; i++)
buffer.putInt(random.nextInt());
buffer.flip();
FileOutputStream fos = new FileOutputStream("/tmp/random.ints");
fos.getChannel().write(buffer);
fos.close();
long time = System.nanoTime() - start;
System.out.printf("Took %.3f seconds to generate&write %,d values%n", time / 1e9, values);
打印
Took 0.021 seconds to generate&write 1,000,000 values
读同一个文件。
long start2 = System.nanoTime();
FileInputStream fis = new FileInputStream("/tmp/random.ints");
MappedByteBuffer buffer2 = fis.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, values * 4).order(ByteOrder.nativeOrder());
for (int i = 0; i < values; i++)
buffer2.getInt();
fis.close();
long time2 = System.nanoTime() - start2;
System.out.printf("Took %.3f seconds to read %,d values%n", time2 / 1e9, values);
打印
Took 0.011 seconds to read 1,000,000 values
重复读取同一个文件
long sum = 0;
int repeats = 1000;
for (int j = 0; j < repeats; j++) {
buffer2.position(0);
for (int i = 0; i < values; i++)
sum += buffer2.getInt();
}
fis.close();
long time2 = System.nanoTime() - start2;
System.out.printf("Took %.3f seconds to read %,d values%n", time2 / 1e9, repeats * values);
打印
Took 1.833 seconds to read 1,000,000,000 values
答案 1 :(得分:3)
你可以考虑去的几种方式
1使用相同的种子生成随机数
2生成随机数并将其保存在文件中。你的程序二读取文件以获取值。
答案 2 :(得分:1)
最快的方法是运行程序一次,记下生成的随机数,然后在程序中对数组中的随机数进行硬编码!然后,下一次,程序可以从数组中读取这些相同的值。
假设您的程序生成随机数,如下所示 -
0.34,0.15,0.28,0.45,......
然后,您可以定义一个数组并将这些值存储在其中。
randomValues[0] = 0.34;
randomValues[1] = 0.15;
randomValues[2] = 0.28;
randomValues[3] = 0.45;
.
.
.
然后每次只需使用索引获取所需的随机数。
index = 0;
randomNumber = randomValues[index];
index++; // so the next time, you can get the next random number in sequence.
答案 3 :(得分:0)
生成一次,然后将它们保存到文件中...... 然后,每次要运行程序时,都必须再次加载这些值。