java-使用ObjectOutputStream时估计磁盘上文件的大小

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

    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();
上一篇:2021-07-15


下一篇:序列化反序列化流、打印流