どのメンバーでもクラスをシリアライズできますか?私のクラスは以下の通りです私たちは任意のmeberなしでクラスをシリアライズできますか?
もしそうなら、selializedオブジェクトファイルのサイズはどのくらいでしょうか?
どのメンバーでもクラスをシリアライズできますか?私のクラスは以下の通りです私たちは任意のmeberなしでクラスをシリアライズできますか?
もしそうなら、selializedオブジェクトファイルのサイズはどのくらいでしょうか?
もちろん可能です。しかし、あなたはJavaの(むしろ賢い)直列化メカニズムをキックオフする
Class test implements java.io.Serializable
を記述する必要があり、本当にあなたはクラスの静的フィールドとしてserialVersionUID
の価値を提供するべきである:
static final long serialVersionUID = 1L;
Javaコンパイラが生成するもの(コンパイラの実装によって異なる可能性があります)に依存しないようにする必要があります。
はい、あなたのクラスが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を返すメソッド
はい、あなたのケースではありません。 – SomeJavaGuy
どのようにシリアル化する予定ですか? ObjectOutputStream?クラスは '' Serializable''を実装しなければなりません。もしそうなら、それを試してバイト数を調べてみてはどうでしょうか? – f1sh
あなたはそれを試して何が起こったのですか? – Jesper