Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the fastest way to create a 2GB file containing random bytes in Java?

I want a way to generate a file containing random bits in Java. What will create the random file the fastest? I want to create files of any specified size containing random bits. I want to be able to generate a 2GB file in a matter of minutes (less than a minute if possible). The technique I'm using right now takes hours to do 2GB:

...
private static Random r = new Random();

private static int rand(int lo, int hi) {
    int n = hi - lo + 1;
    int i = r.nextInt() % n;
    if (i < 0) {
        i = -i;
    }
    return lo + i;
}
...
fos = new FileOutputStream(hdFiller);
for(long i = 0; i < maxFileSize; i++) {
    int idx = rand(0,32);
    fos.write(idx);
}
fos.close();
...

There has got to be a way to do this faster, maybe even in less than a minute for 2GB.

Thanks.

like image 270
Robert Louis Murphy Avatar asked Aug 10 '12 18:08

Robert Louis Murphy


2 Answers

If you want to generate random bits all at once, rather than looping, take a look at the java.util.Random method nextBytes(byte[]) which fills the specified byte array with random bytes. Create a byte array exactly large enough for 2GiB of data and you can generate the whole random bit source in one go.

like image 143
Bobulous Avatar answered Sep 16 '22 11:09

Bobulous


Try wrapping your FileOutputStream with a BufferedOutputStream.

like image 27
Hyangelo Avatar answered Sep 18 '22 11:09

Hyangelo