2013-05-16 10 views
1

웹에서 비디오 파일을 다운로드하고 싶습니다. 121MB입니다. 이제 디스크에이 121MB를 미리 할당하고 싶습니다 (0 또는 그 이상). 그리고 urlconnection의 inputstream 데이터로 단계별로 채우고 싶습니다. 다른 말로하면 : 얼마나 많은 파일이 아직 다운로드되었는지는 중요하지 않습니다. 파일 크기는 항상 대상이 121MB입니다.Java 사전 할당 된 데이터 파일 (드라이브)

가능합니까? 감사합니다.

+1

예, 가능하지만 처음 시도하지 않으면 응답을 얻지 못할 수 있습니다. – DeadlyJesus

+0

특정 크기의 빈 파일을 만들 수 있다는 것을 알고 있습니다. 그러나이 더미 파일에 데이터를 쓰면 (fileoutputstream을 통해) 덮어 쓰게되고 크기는 현재 다운로드 한 데이터로 업데이트됩니다. – Dano

+0

왜 안 되니? 그냥 파일을 열고 0/필러 데이터를 쓰십시오 (반복하기 쉽습니다). – donfede

답변

0

분명히. 이 파일에 121 * 1024 * 1024 바이트를 쓰는 파일 작성 루프를 작성하십시오. 바이트 단위로 쓰거나 청크를 사용할 수 있습니다. 청크는 성능 관점에서 바람직합니다.

byte[] bytes = new byte[1024]; // 1KB array. 
OutputStream os = new FileOutputStream(myFilePath); 
for (int size = 0; size < 121*1024*1024; size += bytes.length;) { 
    os.write(b); 
    os.flush(); 
} 
os.close(); 
+0

빠른 답장을 보내 주셔서 감사합니다. 그러나 그것은 제가 의미하는 바가 아닙니다. 나는 "콘테이너"(아무것로 채워지는 파일)를 창조하고 videodata로 위로 채우고 싶다. 아직 파일이 다운로드되지 않았는데도 파일이 121MB가되기를 원합니다. – Dano

1

내가 해결책을 가지고 : 여기

데모 코드입니다. 우선 빈 더미 파일을 작성한 다음 빈 파일을 다시 열어 바이트를 대체합니다.

System.out.println("Writing dummy ..."); 
    byte buf[] = new byte[1024]; 
    for (int size = 0; size < fileLength; size += buf.length) { 
     out.write(buf); 
     out.flush(); 
    } 
    out.close(); 

    System.out.println("Writing data ..."); 
    RandomAccessFile raf = new RandomAccessFile(temp, "rw"); 
    int count = 0; 
    long total = 0; 
    while ((count = stream.read(buf)) > 0) { 
     raf.seek(total); 
     raf.write(buf); 
     total += count; 
    } 
    raf.close();