1

我想从网上下载一个视频文件。它是 121 MB。现在我想在磁盘上预先分配这 121 MB(用零或任何东西),并用来自 urlconnection 的输入流的数据逐步填充它。或者换句话说:下载多少并不重要 - 文件大小始终是指定的 121MB。

可能吗?谢谢你

4

2 回答 2

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();
于 2013-05-16T13:49:46.060 回答
-1

明显地。创建文件,写入循环,将 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();
于 2013-05-16T13:10:34.173 回答