package com.n;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class S implements Serializable {
private static final long serialVersionUID = 1L;
transient int i;
public static void main(String[] args) throws Exception, IOException {
ObjectOutputStream oos =
new ObjectOutputStream(new FileOutputStream("c:\\jav\\f.txt"));
S obj1 = new S(10);
oos.writeInt(obj1.i);
oos.writeObject(obj1);
ObjectInputStream ois =
new ObjectInputStream(new FileInputStream("c:\\jav\\f.txt"));
System.out.println("Object contains >> " + ois.readObject());
System.out.println("Transient variable written separately yields >> i ="
+ ois.readInt());
}
public S(int i) {
this.i = i;
}
@Override
public String toString() {
return "i= " + i;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码抛出
Exception in thread "main" java.io.OptionalDataException
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at com.n.S.main(S.java:27)
Run Code Online (Sandbox Code Playgroud)
但当我交换输出线时
System.out.println("Transient variable written separately yields >> i =" + ois.readInt());
System.out.println("Object contains >> " + ois.readObject());
Run Code Online (Sandbox Code Playgroud)
它运行正常.但为什么会这样呢?我是否必须首先编写并读取序列化的原始值然后读取或写入对象?什么是OptionalDataException?
您需要以与写入ObjectOutputStream时完全相同的顺序读取ObjectInputStream中的数据.
| 归档时间: |
|
| 查看次数: |
19982 次 |
| 最近记录: |