2011-06-11 78 views
0

我正在写一个对象到一个文件。该对象基本上是来自文件的数据块,并添加了一些其他信息。我不明白的是输入文件大约为10 KB,但输出文件大约为20 KB,但数据只添加了一个字节。序列化对象大小?

可能是什么原因?是否有一些对象标识符,属性也被记录并占用了一些空间,与数据块不同。

代码段:

public void writePacket(Packet packet) { 
    String fileName = packet.getName(); 
    String filePath = dtnStore+fileName ; 
    ObjectOutputStream out = null; 
    File file = new File(filePath); 
    if(!file.exists()) 
    out = new ObjectOutputStream(new FileOutputStream (filePath)); 
    else 
    out = new AppendableObjectOutputStream (new FileOutputStream (filePath, true)); 
    out.writeObject(packet); 
    out.flush(); 
} 
+1

你如何将数据写入该文件?你的“对象”有哪些属性? – Mat 2011-06-11 07:29:12

+0

@quamar,我冒昧地编辑你的问题,这样对于讲英语的母语人士更有意义。我希望这就是你想要问的,但更清楚?如果没有,请随时编辑您的问题......甚至将其改回。 – corlettk 2011-06-11 07:32:16

+1

我们需要查看输入文件和输出文件的样本,以便对膨胀的起因进行任何有教育的猜测。如果你在哪里阅读制表符分隔的文件,然后编写XML,那么你会得到你的解释。 – corlettk 2011-06-11 07:34:38

回答

2

ObjectOutputStream的是一个合理的详细格式。它包含了很多关于如何重建对象的信息,包括它的类型。大多数文件格式不包含这些信息,这些信息使它们更小,但对于Java开发人员来说并不方便。

除非您的输入来自ObjectInputStream,否则文件大小可能会大幅增加。

例如假设你从一个文本文件中读取一个Integer,说100\n是4个字节,但是当你将它写入一个ObjectOutputStream时,它将会有81个字节长,因为它包含一个头文件,对象的类型,字段名称的编号等。