2

Java 新手,我正在使用browxy尝试回答这个问题,但它不允许创建文件。

所以我想知道在下面的代码中,当 readObject 被调用时,它是否调用默认构造函数(如果存在)?(另外,Java 中是否有等效的 MemoryStream(C#)?)

import java.util.*;
import java.io.*;

public class HelloWorld {
  public static void main(String[] args) {
        System.out.println("Hello World");

        try
        {
            TestClass tc = new TestClass();

            FileOutputStream fos = new FileOutputStream("t.tmp");
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                oos.writeObject(tc);
                oos.close();

                    FileInputStream fis = new FileInputStream("t.tmp");
                    ObjectInputStream ois = new ObjectInputStream(fis);

                    TestClass tcClone = (TestClass)ois.readObject();

                    ois.close();
        }
        catch(Exception e)
        {
            System.out.println(e);
        }

  }
}

class TestClass implements Serializable
{
    public TestClass()
    {
        System.out.println("TestClass CTOR");
    }
}
4

2 回答 2

4

对于实现 的类java.io.Externalizable,将调用公共无参数构造函数。

对于其他可序列化类,调用最派生的不可序列化基类的可访问无参数构造函数。可序列化类的readObject方法被调用,就好像它们是构造函数(或者至少,在调用超级构造函数返回后立即构造函数体)。

一个常见的误解是可序列化的类需要一个公共的无参数构造函数。他们不。

java.lang.String并且枚举是专门处理的。

于 2013-06-16T20:39:30.897 回答
4

我想知道在下面的代码中,当 readObject 被调用时,它是否调用默认构造函数(如果存在)?

不,它没有..

Java中是否有等效的MemoryStream(C#)?

ByteArrayInputStreamByteArrayOutputStream

于 2013-06-16T20:30:22.667 回答