2011-06-11 79 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個字節長,因爲它包含一個頭文件,對象的類型,字段名稱的編號等。