我正在尝试将我的空间数据从表写入文件。但是我需要在写入磁盘之前知道磁盘上数据的确切大小。例如,假设我正在使用以下代码写入磁盘:

    FileOutputStream fos = new FileOutputStream("t.tmp",false);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeInt(gid);
    oos.writeUTF(fullname);
    oos.writeInt(d.shape.length);
    oos.write(d.shape);

    oos.close();
    fos.close();

我以为磁盘上的文件大小等于:
size= 4B {for gid, int} + fullname.getBytes.length() {string} + 4B {d.shape.length, int} + d.shape.length

但是实际上,这与磁盘上的实际文件大小有很大不同。

我还注意到,即使使用ObjectOutputstream创建一个空文件也会导致磁盘上有4B空间。

对如何计算磁盘上的文件大小有帮助吗?

(我无法将数据写入磁盘,然后读取实际大小。这会降低性能。相反,我需要根据存储在内存中的数据值来计算磁盘上的数据大小。)

最佳答案

假设您不介意浪费一些内存,则可以先将其全部写到ByteArrayOutputStream中,然后再获取大小。

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(boas);
oos.writeInt(gid);
oos.writeUTF(fullname);
oos.writeInt(d.shape.length);
oos.write(d.shape);

oos.close();
boas.close();
int size = boas.size();

10-06 13:46