java readunshared_Java.io.ObjectInputStream.readUnshared()方法实例

java.io.ObjectInputStream.readUnshared() 方法从ObjectInputStream中读取“非共享”对象。这种方法是与readObject相同,但它可以防止后续调用readObject和readUnshared从返回通过这个调用.指定得到的反序列化实例其他参考:

如果readUnshared被称为反序列化一个反向引用(先前已经写入流对象的流表示),一个ObjectStreamException将被抛出

如果readUnshared成功返回,那么任何后续尝试反序列化反向引用到流句柄由readUnshared反序列化将导致ObjectStreamException被抛出。

通过readUnshared反序列化一个对象,返回的对象关联的流句柄无效。请注意,这本身并不能保证通过readUnshared返回的引用是唯一的;反序列化的对象可以定义它返回一个对象可见的其他各方readResolve方法的方法,或readUnshared可能会返回一个Class对象或枚举常量索取其他地方流或通过外部手段。如果反序列化对象定义一个readResolve方法方法,并且该方法的调用返回一个数组,然后readUnshared返回数组的一个浅表副本;这保证了返回的数组对象是唯一的,不能从readObject或readUnshared上的ObjectInputStream的第二次调用获得,即使底层的数据流已经被操纵。

ObjectInputStream的子类重写此方法只能在安全上下文拥有了“enableSubclassImplementation”的SerializablePermission构造;任何试图实例化这样一个子类没有此权限将导致抛出SecurityException。

声明

以下是java.io.ObjectInputStream.readUnshared()方法的声明

publicObjectreadUnshared()

参数

NA

返回值

该方法返回一个引用对象的反序列化

异常

ClassNotFoundException --如果无法找到类的对象进行反序列化

StreamCorruptedException --如果在流中的控制信息不一致

ObjectStreamException -- 如果对象进行反序列化已经出现在流中

OptionalDataException -- 如果原始数据是下一个在流中

IOException -- 如果反序列化期间发生I/ O错误

例子

下面的示例演示java.io.ObjectInputStream.readUnshared()方法的用法。

packagecom.yiibai;importjava.io.*;publicclassObjectInputStreamDemo{publicstaticvoidmain(String[]args){Strings="Hello World";try{// create a new file with an ObjectOutputStreamFileOutputStreamout=newFileOutputStream("test.txt");ObjectOutputStreamoout=newObjectOutputStream(out);// write something in the fileoout.writeUnshared(s);oout.flush();// create an ObjectInputStream for the file we created beforeObjectInputStreamois=newObjectInputStream(newFileInputStream("test.txt"));// read and print the unshared objectSystem.out.println(""+ois.readUnshared());}catch(Exceptionex){ex.printStackTrace();}}}

让我们编译和运行上面的程序,这将产生以下结果:

HelloWorld

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值