Java readExternal()未按预期工作?
在本例中,我使用的是Java readExternal()未按预期工作?,java,serialization,externalizable,Java,Serialization,Externalizable,在本例中,我使用的是外部化。首先,我使用writeExternal()方法将对象序列化到名为“tmp”的文件中 default The original car is name=Maruti year2009 age10 The new Car is name=null year0 age10 为什么汽车的名称和年份没有序列化?如果是序列化的,为什么我将null和0作为它们的值…请指定 import java.io.*; class Car implements Externalizable
外部化
。首先,我使用writeExternal()
方法将对象序列化到名为“tmp”的文件中
default
The original car is name=Maruti
year2009
age10
The new Car is name=null
year0
age10
为什么汽车的名称和年份没有序列化?如果是序列化的,为什么我将null
和0
作为它们的值…请指定
import java.io.*;
class Car implements Externalizable
{
String name;
int year;
static int age;
public Car()
{
super();
System.out.println("default");
}
Car(String n,int y)
{
name=n;
year=y;
age=10;
}
public void writeExternal(ObjectOutput out) throws IOException
{
out.writeObject(name);
out.writeInt(year);
out.writeInt(age);
}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
{
while(in.available()>0){
name=(String)in.readObject();
year=in.readInt();
age=in.readInt();
}
}
public String toString()
{
return("name="+name+"\n"+"year"+year+"\n" +"age" +age);
}
}
public class ExternExample
{
public static void main(String args[])
{
Car car=new Car("Maruti",2009);
Car newCar=null;
try{
FileOutputStream fout=new FileOutputStream("tmp");
ObjectOutputStream so=new ObjectOutputStream(fout);
so.writeObject(car);
so.flush();
}
catch(Exception e){System.out.println(e);}
try
{
FileInputStream fis=new FileInputStream("tmp");
ObjectInputStream oin=new ObjectInputStream(fis);
newCar = (Car) oin.readObject();
}
catch(Exception e){System.out.println(e);}
System.out.println("The original car is "+car);
System.out.println("The new Car is "+newCar);
}
}**
摆脱循环和
available()
测试。您只编写了一个对象,所以应该只读取一个对象,所以没有理由循环,更不用说调用available()
。这种方法几乎没有正确的用途,而这不是其中之一
如果您扩展了Serializable
而不是Externalizable
,并简单地删除了read/writeExternal()
方法,那么它也可以工作
您的主要方法不是关闭
ObjectOutputStream
或ObjectInputStream。
摆脱循环和可用()
测试。您只编写了一个对象,所以应该只读取一个对象,所以没有理由循环,更不用说调用available()
。这种方法几乎没有正确的用途,而这不是其中之一
如果您扩展了Serializable
而不是Externalizable
,并简单地删除了read/writeExternal()
方法,那么它也可以工作
您的主要方法不是关闭ObjectOutputStream
或ObjectInputStream。