这个方法只适用于已知文件内所存对象的具体内容,对于未知的类只能是利用流读取。具体实现代码如下:
import java.io.Serializable;
import java.io.*;
import java.nio.file.*;
import java.io.IOException;
//创建对象
class Junk implements Serializable {
private static java.util.Random generator = new java.util.Random();// 创建随机数
// 建立对象参数
private int answer;
private double[] numbers;
private String thought;
private static final long serialVersionUID = 9001L;// 如果没有系统会默认创建,如果以前也有建立的对象接口但容易会有冲突
public Junk(String thought) {
this.thought = thought;
answer = 12;
numbers = new double[3 + generator.nextInt(4)];
for (int i = 0; i < numbers.length; ++i) {
numbers[i] = generator.nextDouble();
}
}
@Override
public String toString() {
StringBuffer strBuf = new StringBuffer(thought);
strBuf.append('\n').append(String.valueOf(answer));
for (int i = 0; i < numbers.length; ++i) {
strBuf.append("\nnumbers[").append(String.valueOf(i)).append("]=")
.append(numbers[i]);
}
return strBuf.toString();//调用的未重载之前的toString函数
}
}
public class DeserializeObjects {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
Path file = Paths.get(System.getProperty("user.home")).resolve(
"Beginning Java Stuff").resolve("JunkObjects.bin");
if(!Files.exists(file)){
System.out.printf("\nFile %s does not exist.",file);
System.exit(1);
}
int objectCount=0;
try{
ObjectInputStream objectIn=new ObjectInputStream(new BufferedInputStream(Files.newInputStream(file)));//建立读取对象流
Junk object=null;
while(true){
object=(Junk)objectIn.readObject();//转化为目标对象,如果文件内对象不匹配会抛出异常
++objectCount;
System.out.println(object);
}
}catch(EOFException e){//读取完毕
System.out.println("EOF reached. "+objectCount+" objects read.");
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}
实现结果如下: