例如,我有一个复杂的动态分配结构(例如二叉树),需要写入由不同部分组成的文件中。我想首先将结构的大小写为双字,然后是结构本身,但是只有在将结构写入文件后才知道结构的大小。在这种情况下,很难预先确定内存中结构的大小。
最好将大小写为0,然后写入结构,然后回溯并用正确的值覆盖大小?不过我不喜欢这个主意。有更好/正确的方法吗?
最佳答案
只是一个想法:将数据写入 ByteArrayOutputStream
,之后,您应该能够调用 size()
来获取实际长度(以字节为单位),并调用 toByteArray()
来获取可以写入文件的字节缓冲区。
代码示例
public static void main (String[] args) throws java.lang.Exception {
ArrayList objects = new ArrayList();
objects.add("Hello World");
objects.add(new Double(42.0));
System.out.println(sizeof(objects));
}
public static int sizeof(Serializable object) {
ObjectOutputStream out = null;
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
out = new ObjectOutputStream(baos);
out.writeObject(object);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return baos != null? baos.size() : -1;
}
这只是演示了一个sizeof模拟器(与c实现不同,因为它计算序列化对象的大小 - 原始字节的实现会略有不同)。
关于java - 在将 Java 中动态分配的结构写入文件之前,如何确定其大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5854286/