2012-08-10 2 views
4

Java에서 임의의 비트를 포함하는 파일을 생성하는 방법이 필요합니다. 무작위 파일을 가장 빠르게 만드는 것은 무엇입니까? 임의의 비트를 포함하는 지정된 크기의 파일을 만들고 싶습니다. 가능한 경우 분 미만의 2GB 파일을 생성 할 수 있어야합니다. 내가 지금 사용하고이 기술은 2 기가 바이트 할 시간이 소요 : 어쩌면 2기가바이트에 대한 분 안에 빠르게 할 수있는 방법이있을거야하고있다Java에서 임의의 바이트를 포함하는 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(); 
... 

.

감사합니다.

+14

어떤 플랫폼을 사용하고 계십니까? 유닉스 계열이라면 명령 행에서 이렇게하는 것이 더 낫다.'dd if =/dev/urandom = random.txt bs = 4096 count = 512' (4096 * 512 = 2meg, 당신의 2gig). –

+0

@MarcB BEAUTIFUL! – Eugene

+1

무작위는 얼마나 무작위입니까? 랜덤이 많을수록 길어집니다. 왜 무작위 일 필요가 있습니까? –

답변

6

루프가 아닌 임의의 비트를 동시에 생성하려면 임의의 바이트로 지정된 바이트 배열을 채우는 java.util.Random method nextBytes(byte[])을 살펴보십시오. 데이터의 2GiB만큼 충분히 큰 바이트 배열을 만들고 한 번에 전체 임의의 비트 소스를 생성 할 수 있습니다.

+4

프로그램에서 2GB의 메모리가 필요하고 힙 메모리 오류로 인해 충돌이 발생할 가능성이 있으므로 문자 그대로 사용하지 마십시오. 대신 바이트 배열을 작은 덩어리로 생성하십시오. –

+0

다소 작은 덩어리가 아마 더 나을 것이고,'java.nio' FileChannel을 사용하여 MemoryMappedFile ([Java 메모리 매핑 파일 자습서에서 생각하기] (http://www.linuxtopia.org/online_books/programming_books)에서 생각할 수 있습니다. /thinking_in_java/TIJ314_029.htm)) –

+0

각 파일 위치에 한 번만 액세스하는 경우 메모리 매핑 파일이 많은 이점을 제공하지 않을 수 있으며 과도한 MMU 작업을 초래할 수 있습니다. 최고 성능을 위해 필요한 모든 것은 직접 바이트 버퍼입니다. –

3

FileOutputStream을 BufferedOutputStream으로 래핑 해보십시오.