2016-11-25 7 views
1

どのメンバーでもクラスをシリアライズできますか?私のクラスは以下の通りです私たちは任意のmeberなしでクラスをシリアライズできますか?

もしそうなら、selializedオブジェクトファイルのサイズはどのくらいでしょうか?

+0

はい、あなたのケースではありません。 – SomeJavaGuy

+0

どのようにシリアル化する予定ですか? ObjectOutputStream?クラスは '' Serializable''を実装しなければなりません。もしそうなら、それを試してバイト数を調べてみてはどうでしょうか? – f1sh

+1

あなたはそれを試して何が起こったのですか? – Jesper

答えて

1

もちろん可能です。しかし、あなたはJavaの(むしろ賢い)直列化メカニズムをキックオフする

Class test implements java.io.Serializable

を記述する必要があり、本当にあなたはクラスの静的フィールドとしてserialVersionUIDの価値を提供するべきである:

static final long serialVersionUID = 1L;

Javaコンパイラが生成するもの(コンパイラの実装によって異なる可能性があります)に依存しないようにする必要があります。

1

はい、あなたのクラスがjava.io.Serializableインターフェイスを実装していることを宣言する必要があります。

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

でその他

は、一つのファイルMain.javaに完全な例であります

3フィールドサイズのPojo = 50

フィールドなしのPojo = 25

フィールドを持たないPojoと、intサイズ= 26を返すメソッド

関連する問題