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");
}
}
答案 0 :(得分:4)
我想知道在下面的代码中,当调用readObject时, 它是否调用默认构造函数(如果存在)或不调用?
不,它没有..
Java中是否有等效的MemoryStream(C#)?
ByteArrayInputStream
和ByteArrayOutputStream
答案 1 :(得分:4)
对于实现java.io.Externalizable
的类,将调用public no-arg构造函数。
对于其他可序列化类,将调用派生程度最高的非可序列化基类的可访问no-arg构造函数。可序列化的班级'调用readObject
方法就好像是构造函数(或者至少是从调用超级构造函数返回后的构造函数体)。
一个常见的误解是可序列化类需要一个公共的无参数构造函数。他们没有。
java.lang.String
和枚举是专门处理的。