//下面程序的目的是实现对像的序列化。程序运行时先看obj.txt文件中有没有以前保存的文件,如果没有的话就new 一个对像并写入obj.txt中。最后读出obj.txt中的对像并输出,但是运行时为什么会出现EOFException呢?
import java.io.*;
public class SerializableTest implements Serializable
{
String str;
public SerializableTest(String str)
{
this.str=str;
}
public static void main(String[] args)
{
FileInputStream in=null; FileOutputStream out=null; ObjectInputStream oin=null; ObjectOutputStream oout=null;
SerializableTest temp=null,temp2=null;
SerializableTest obj=new SerializableTest("hello");
try{
in=new FileInputStream("obj.txt");
oin=new ObjectInputStream(in);if((temp=(SerializableTest)oin.readObject())==null)
{
oin.close();
out=new FileOutputStream("obj.txt");
oout=new ObjectOutputStream(out);
oout.writeObject(obj);
oout.close();
}in=new FileInputStream("obj.txt");
oin=new ObjectInputStream(in);
temp2=(SerializableTest)oin.readObject();
System.out.println(temp2.str);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
import java.io.*;
public class SerializableTest implements Serializable
{
String str;
public SerializableTest(String str)
{
this.str=str;
}
public static void main(String[] args)
{
FileInputStream in=null; FileOutputStream out=null; ObjectInputStream oin=null; ObjectOutputStream oout=null;
SerializableTest temp=null,temp2=null;
SerializableTest obj=new SerializableTest("hello");
try{
in=new FileInputStream("obj.txt");
oin=new ObjectInputStream(in);if((temp=(SerializableTest)oin.readObject())==null)
{
oin.close();
out=new FileOutputStream("obj.txt");
oout=new ObjectOutputStream(out);
oout.writeObject(obj);
oout.close();
}in=new FileInputStream("obj.txt");
oin=new ObjectInputStream(in);
temp2=(SerializableTest)oin.readObject();
System.out.println(temp2.str);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
时会出错,因此你需要的判断是oin==null,而不是temp=(SerializableTest)oin.readObject())==null之类的。
改成下面这样就可以了:import java.io.*;
public class SerializableTest implements Serializable
{
String str;
public SerializableTest(String str)
{
this.str=str;
}
public static void main(String[] args)
{
FileInputStream in=null; FileOutputStream out=null; ObjectInputStream oin=null; ObjectOutputStream oout=null;
SerializableTest temp=null,temp2=null;
SerializableTest obj=new SerializableTest("hello");
try{
in=new FileInputStream("obj.txt");
oin=new ObjectInputStream(in);
}catch(EOFException e){
}catch(Exception e){
}
try{ if(oin==null)
{
out=new FileOutputStream("obj.txt");
oout=new ObjectOutputStream(out);
oout.writeObject(obj);
oout.close();
}else{
in=new FileInputStream("obj.txt");
oin=new ObjectInputStream(in);
temp2=(SerializableTest)oin.readObject();
System.out.println(temp2.str);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
public class SerializableTest implements Serializable
{
String str;
public SerializableTest(String str)
{
this.str=str;
}
public static void main(String[] args)
{
FileInputStream in=null; FileOutputStream out=null; ObjectInputStream oin=null; ObjectOutputStream oout=null;
SerializableTest temp=null,temp2=null;
SerializableTest obj=new SerializableTest("hello");
try{
File f = new File("obj.txt");
if(f.exists()){
in=new FileInputStream("obj.txt");
oin=new ObjectInputStream(in);
if((temp=(SerializableTest)oin.readObject())==null){
oin.close();
out=new FileOutputStream("obj.txt");
oout=new ObjectOutputStream(out);
oout.writeObject(obj);
oout.close();
}
}
in=new FileInputStream("obj.txt");
oin=new ObjectInputStream(in);
temp2=(SerializableTest)oin.readObject();
System.out.println(temp2.str);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public class SerializableTest implements Serializable
{
String str;
public SerializableTest(String str)
{
this.str=str;
}
public static void main(String[] args)
{
FileInputStream in=null; FileOutputStream out=null; ObjectInputStream oin=null; ObjectOutputStream oout=null;
SerializableTest temp=null,temp2=null;
SerializableTest obj=new SerializableTest("hello");
try{
File f = new File("obj.txt");
if(f.exists()){
in=new FileInputStream("obj.txt");
oin=new ObjectInputStream(in);
if((temp=(SerializableTest)oin.readObject())==null){
oin.close();
out=new FileOutputStream("obj.txt");
oout=new ObjectOutputStream(out);
oout.writeObject(obj);
oout.close();
}
}
else{
out=new FileOutputStream("obj.txt");
oout=new ObjectOutputStream(out);
oout.writeObject(obj);
oout.close();
}
in=new FileInputStream("obj.txt");
oin=new ObjectInputStream(in);
temp2=(SerializableTest)oin.readObject();
System.out.println(temp2.str);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}