2012-03-20 80 views
0

我想在此實例中且p序列的大小來計算檢體P的大小:對象的大小序列

public class Main { 

    static public void main(String[] args) throws IOException { 
     Personne p1 = new Personne("name1", "username1", 25); 
     SrzDrz sr = new SrzDrz(p1, "file1"); 

     // Calculate size of(sr) and p1 ??? 
    } 
} 

類Personne是:

public class Personne implements Serializable { 

    static private final long serialVersionUID = 6L; 
    private String nom; 
    private String prenom; 
    private Integer age; 

    public Personne(String nom, String prenom, Integer age) { 
     this.nom = nom; 
     this.prenom = prenom; 
     this.age = age; 
    } 

    public String toString() { 
     return nom + " " + prenom + " " + age + " years"; 
    } 
} 

類SrzDrz是:

public class SrzDrz { 

    SrzDrz(Personne p, String name) throws IOException { 

     FileOutputStream fos = new FileOutputStream(name); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 

     try { 
      oos.writeObject(p); 
      oos.flush(); 
      System.out.println(p + " serialized"); 
     } finally { 
      try { 
       oos.close(); 
      } finally { 
       fos.close(); 
      } 
     } 
    } 
} 
+0

再次問同樣的事情不會幫助,你知道... http://stackoverflow.com/questions/9789045 /內存佔用後反序列化 – skaffman 2012-03-20 16:50:08

+0

不,它不一樣,在這裏我問如何計算簡單對象的內存!並在序列化後的最後一個問題!!!!!!!!!! – Mehdi 2012-03-20 16:53:53

+0

可能重複[在Java中對象的內存消耗是多少?](http://stackoverflow.com/questions/258120/what-is-the-memory-consumption-of-an-object-in-java) – dty 2012-03-20 16:58:56

回答

0

嘗試使用File.length()方法獲取您寫入對象的文件的大小。

如果你想知道在內存中對象的大小,試試這個:

http://www.javamex.com/classmexer/

+0

我不使用任何類型的文件! – Mehdi 2012-03-20 17:00:15

+0

有沒有方法來計算沒有使用任何jar的對象的內存大小? – Mehdi 2012-03-20 17:01:52

+0

@user - 您使用FileOutputStream創建文件。 – 2012-03-20 17:02:36

4

這個怎麼樣?只要寫成一個ByteArrayOutputStream,看看它有多大得到...

ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(); 
ObjectOutputStream stream = new ObjectOutputStream(byteOutput); 
stream.writeObject(p1); 
stream.close(); 
System.out.println("Bytes = " + byteOutput.toByteArray().length); 

輸出

Bytes = 200 
+0

如果我理解你的程序,我不需要序列化文件,但在byteOutput? – Mehdi 2012-03-20 17:06:51

+1

是的,你可以序列化成byteOutput,除非你有其他寫入磁盤的理由。 – Adam 2012-03-20 17:08:38

+0

好的,謝謝你的幫助:) 只是最後一個問題:如果byteOutput不會寫入磁盤,它寫入? – Mehdi 2012-03-20 17:10:45