웹에서 비디오 파일을 다운로드하고 싶습니다. 121MB입니다. 이제 디스크에이 121MB를 미리 할당하고 싶습니다 (0 또는 그 이상). 그리고 urlconnection의 inputstream 데이터로 단계별로 채우고 싶습니다. 다른 말로하면 : 얼마나 많은 파일이 아직 다운로드되었는지는 중요하지 않습니다. 파일 크기는 항상 대상이 121MB입니다.Java 사전 할당 된 데이터 파일 (드라이브)
가능합니까? 감사합니다.
웹에서 비디오 파일을 다운로드하고 싶습니다. 121MB입니다. 이제 디스크에이 121MB를 미리 할당하고 싶습니다 (0 또는 그 이상). 그리고 urlconnection의 inputstream 데이터로 단계별로 채우고 싶습니다. 다른 말로하면 : 얼마나 많은 파일이 아직 다운로드되었는지는 중요하지 않습니다. 파일 크기는 항상 대상이 121MB입니다.Java 사전 할당 된 데이터 파일 (드라이브)
가능합니까? 감사합니다.
분명히. 이 파일에 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();
빠른 답장을 보내 주셔서 감사합니다. 그러나 그것은 제가 의미하는 바가 아닙니다. 나는 "콘테이너"(아무것로 채워지는 파일)를 창조하고 videodata로 위로 채우고 싶다. 아직 파일이 다운로드되지 않았는데도 파일이 121MB가되기를 원합니다. – Dano
내가 해결책을 가지고 : 여기
데모 코드입니다. 우선 빈 더미 파일을 작성한 다음 빈 파일을 다시 열어 바이트를 대체합니다.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();
예, 가능하지만 처음 시도하지 않으면 응답을 얻지 못할 수 있습니다. – DeadlyJesus
특정 크기의 빈 파일을 만들 수 있다는 것을 알고 있습니다. 그러나이 더미 파일에 데이터를 쓰면 (fileoutputstream을 통해) 덮어 쓰게되고 크기는 현재 다운로드 한 데이터로 업데이트됩니다. – Dano
왜 안 되니? 그냥 파일을 열고 0/필러 데이터를 쓰십시오 (반복하기 쉽습니다). – donfede