2016-11-25 67 views
1

我們可以序列化一個類沒有任何成員?我的班級如下我們可以序列化一個類沒有任何meber

Class test 
{ 
    public void method1(){ 
    //No code 
    } 
    public void method2(){ 
    //No code 
    } 
} 

如果是的話會是怎樣的selialized對象文件的大小?

+0

是,你的情況沒有。 – SomeJavaGuy

+0

你打算如何序列化它? ObjectOutputStream的?然後你的類必須實現''Serializable''。如果是這樣的話:爲什麼你不試試看看字節數? – f1sh

+1

當你嘗試時發生了什麼? – Jesper

回答

1

當然可以。但是,你需要寫

Class test implements java.io.Serializable

揭開序幕Java的(相當聰明)序列化機制,而真的是你應該提供的serialVersionUID值作爲類的靜態字段:

static final long serialVersionUID = 1L;

避免依賴於Java編譯器生成器(可能因編譯器實現而異)。

1

是的,你可以但你必須聲明你的類實現了java.io.Serializable接口。

下面是一個完整例如,在一個文件Main.java

import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.io.ObjectOutput; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
import static java.lang.System.*; 

class ObjectSize { 

    public static byte[] toByteArray(Object object) throws IOException { 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     ObjectOutput out = new ObjectOutputStream(bos); 
     out.writeObject(object); 
     return bos.toByteArray(); 
     } 


    public static int getSize(Object obj) throws IOException{ 

     return toByteArray(obj).length; 

    } 

} 


class Pojo1 implements Serializable{ 

    private static final long serialVersionUID = 1L; 
    private int x = 0 ; 
} 

class Pojo2 implements Serializable{ 

    private static final long serialVersionUID = 1L; 
    private int x, y = 0 ; 
} 

class Pojo3 implements Serializable{ 

    private static final long serialVersionUID = 1L; 
    private int x, y , z = 0 ; 
} 

class Test implements Serializable 
{ 

    private static final long serialVersionUID = 1L; 
    public void method1(){} 
    public void method2(){} 
} 


class Test2 implements Serializable 
{ 

    private static final long serialVersionUID = 1L; 
    public void method1(){} 
    public void method2(){} 
    public void method3(){} 
    public int method4(){return 100;} 
    public int method5(){return 0;} 
} 


public class Main { 

    public static void main(String [] args) { 

     try { 

      out.println("Pojo with 1 field size = "+ObjectSize.getSize(new Pojo1())); 
      out.println("Pojo with 2 fields size = "+ObjectSize.getSize(new Pojo2())); 
      out.println("Pojo with 3 fields size = "+ObjectSize.getSize(new Pojo3())); 
      out.println("Pojo with no fields = "+ObjectSize.getSize(new Test())); 
      out.println("Pojo with no fields and a method which returns an int size = "+ObjectSize.getSize(new Test2())); 


     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

結果: POJO的具有1種尺寸= 34

POJO的與2個場尺寸= 42

3個字段大小= 50的Pojo

與沒有字段POJO = 25

POJO的無字段和該方法返回int大小的方法= 26

相關問題