我想将我的空间数据从表中写入文件。但在写入磁盘之前,我需要知道磁盘上数据的确切大小。作为一个例子,让我们说,我现在用的是下面的代码写入到磁盘:当使用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。
有关如何计算磁盘上文件大小的任何帮助?
(我不能将数据写入到磁盘,然后读出真实大小,这会降低性能。相反,我需要根据存储在内存中的数据值来计算磁盘上的数据的大小。)
你真的需要一个* Object * OutputStream吗?你使用'writeObject()'?或者,您的示例代码像您所获得的那样复杂?看起来你最好使用[DataOutputStream](http://docs.oracle.com/javase/6/docs/api/java/io/DataOutputStream.html)。 (一个'ObjectOutputStream'写入流标题信息并跟踪已写入对象的引用,以便它可以简单地编写引用等等 - 所有这些都会妨碍你预先计算大小的努力。) –
另外 - 您可以扩展您在写入字节后使用文件系统感知的性能问题吗?在性能问题方面 –
。我的表格中有40GB的数据,其中很多都是空间数据。我正在对表格进行分区,使每个文件中存储的数据总大小小于某个值(max_file_size)。在第一轮中,我计算了我的表的每一行的磁盘大小,并在下一轮中,我总结了很多可以适用于文件总大小小于max_file_size的文件。因此,写入每个文件然后测量磁盘上的实际文件大小不是一种选择。 – reza