我們可以序列化一個類沒有任何成員?我的班級如下我們可以序列化一個類沒有任何meber
Class test
{
public void method1(){
//No code
}
public void method2(){
//No code
}
}
如果是的話會是怎樣的selialized對象文件的大小?
我們可以序列化一個類沒有任何成員?我的班級如下我們可以序列化一個類沒有任何meber
Class test
{
public void method1(){
//No code
}
public void method2(){
//No code
}
}
如果是的話會是怎樣的selialized對象文件的大小?
當然可以。但是,你需要寫
Class test implements java.io.Serializable
揭開序幕Java的(相當聰明)序列化機制,而真的是你應該提供的serialVersionUID
值作爲類的靜態字段:
static final long serialVersionUID = 1L;
避免依賴於Java編譯器生成器(可能因編譯器實現而異)。
是的,你可以但你必須聲明你的類實現了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
是,你的情況沒有。 – SomeJavaGuy
你打算如何序列化它? ObjectOutputStream的?然後你的類必須實現''Serializable''。如果是這樣的話:爲什麼你不試試看看字節數? – f1sh
當你嘗試時發生了什麼? – Jesper