Java 序列化对象的大小

Java 序列化对象的大小,java,Java,我想计算本例中对象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)

我想计算本例中对象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 ???
    }
}
班级人员是:

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();
            }
        }
    }
}

尝试使用
File.length()
方法获取写入对象的文件的大小

如果要知道内存中对象的大小,请尝试以下操作:


尝试使用
File.length()
方法获取写入对象的文件的大小

如果要知道内存中对象的大小,请尝试以下操作:


这个怎么样?只需在ByteArrayOutputStream中写入,看看它有多大

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

Bytes = 200

这个怎么样?只需在ByteArrayOutputStream中写入,看看它有多大

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

Bytes = 200


再问同样的问题也无济于事,你知道。。。不,这不一样,这里我问如何计算简单对象的内存!在系列化之后的最后一个问题上!!!!!!!!!!你知道,再次问同样的问题可能不会有帮助。。。不,这不一样,这里我问如何计算简单对象的内存!在系列化之后的最后一个问题上!!!!!!!!!!可能重复的我不使用任何类型的文件!如果不使用任何jar,没有方法计算对象的内存大小?@user-您使用FileOutputStream创建文件。@user1149157-您使用的是一个文件(在FileOutputStream中)。@user-只有您自己编写,这对我来说太复杂了,无法在这里回答。我不使用任何类型的文件!如果不使用任何jar,没有方法计算对象的内存大小?@user-您使用FileOutputStream创建文件。@user1149157-您使用的是文件(在FileOutputStream中)。@user-只有您自己编写,这对我来说太复杂了,无法在这里回答。如果我理解您的程序,我不需要在文件中序列化,而是在字节输出中?是的,您可以直接序列化为字节输出,除非您有其他原因写入磁盘。好的,谢谢您的帮助:)最后一个问题:如果字节输出没有写入磁盘,它何时写入?它只存在于内存中。它是一个数组的包装器,符合FileOutputStream的相同接口,唯一的区别是当ObjectOutStream写入它时,它会写入字节数组而不是磁盘,它会根据需要调整数组大小以适应抛出的任何内容。如果我理解你的程序,我不需要在文件中序列化,而是在字节输出中?是的,您可以直接序列化为字节输出,除非您有其他原因写入磁盘。好的,谢谢您的帮助:)最后一个问题:如果字节输出没有写入磁盘,它何时写入?它只存在于内存中。它是数组的包装器,与FileOutputStream符合相同的接口,唯一的区别是当ObjectOutStream写入它时,它会写入字节数组而不是磁盘,它会根据需要调整数组的大小以适应向它抛出的任何内容。