我想从网上下载一个视频文件。它是 121 MB。现在我想在磁盘上预先分配这 121 MB(用零或任何东西),并用来自 urlconnection 的输入流的数据逐步填充它。或者换句话说:下载多少并不重要 - 文件大小始终是指定的 121MB。
可能吗?谢谢你
我想从网上下载一个视频文件。它是 121 MB。现在我想在磁盘上预先分配这 121 MB(用零或任何东西),并用来自 urlconnection 的输入流的数据逐步填充它。或者换句话说:下载多少并不重要 - 文件大小始终是指定的 121MB。
可能吗?谢谢你
我得到了解决方案。首先,我编写空的虚拟文件,然后重新打开空文件并替换字节:
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();
明显地。创建文件,写入循环,将 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();