java - 在将 Java 中动态分配的结构写入文件之前,如何确定其大小?

标签 java dynamic size structure

例如,我有一个复杂的动态分配结构(例如二叉树),需要写入由不同部分组成的文件中。我想首先将结构的大小写为双字,然后是结构本身,但是只有在将结构写入文件后才知道结构的大小。在这种情况下,很难预先确定内存中结构的大小。

最好将大小写为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/

相关文章:

java - 如何在N次刷新页面后停止<META HTTP-EQUIV ="refresh"CONTENT ="2">

java - SpringMVC存储Base64

java - 动态复选框创建

javascript - 为什么我在 jquery 中的 if 语句不能检测图像大小?

sql - 从 SQL 2005 EXPRESS 升级到 SQL 2008 EXPRESS

java - 尝试在 Java 中创建 FileReader 时出现 FileNotFoundException

java - 需要一个 CDATA 事件通知 java 的 stax 解析器

php - 包含和 header php 建议

python - 将方法动态附加到使用 swig 生成的现有 Python 对象?

jquery - 使用 jQuery 获取视口(viewport)的大小