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