一点心得!

Kanfu 2003-06-25 05:37:41
我研究了一下子 :)
ObjectInputStream 构造的的时候,你必须捕获IOException异常的,为什么呢?
因为构造函数会用参数InputStream的readShort()方法读取两个short型的流的头(streamheader)信息,STREAM_MAGIC & STREAM_VERSION;
和ObjectInputStream对应,ObjectOutputStream构造函数会写两个short值。

试想:
如果用socket.getInputStream()作为ObjectInputStream构造函数的参数会出现什么问题?
很明显有可能会造成阻塞。
假设一个用于传输对象的Socket应用,如果Server端和Client端,同样做如下的声明:
ObjectInputStream objin = new ObjectInputStream(Sock.getInputStream());
ObjectOutputStream objout = new ObjectOutputStream(Sock.getOutputStream());
很明显双方都在等待输入流的头信息,造成了阻塞。

下边这段程序也许更能说明问题:
import java.io.*;
public class test{
public static void main(String args[]){
try{
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(
new File("C:\\test.bin")));
System.out.println("out has constrcuted.");
ObjectInputStream in = new ObjectInputStream(System.in);
System.out.println("in has constrcuted.");
}
catch(IOException e){
e.printStackTrace();
}
}
}
运行上面那个程序会阻塞,一直等到你从控制台输入回车,通常会产生java.io.StreamCorruptedException异常,除非你输入的刚好是StreamHeader信息0xac ed 00 05,运行结束,检查C盘根目录,你会发现文件test.bin已经存在,虽然我们没有调用writeObject方法,而文件的内容是0xac ed 00 05即Streamheader信息。
...全文
30 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧