Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java readExternal()未按预期工作?_Java_Serialization_Externalizable - Fatal编程技术网

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。