创建ObjectOutputStream和ObjectInputStream对象顺序

wd9053 2009-09-27 12:58:54
在试着写一个聊天程序。
客户端连接到服务器后,发送一个Order类的对象,其中包含一个字符串,然后在服务器的标准输出中打印出该字符串。
运行时发现在创建ObjectOutputStream对象和ObjectInputStream对象时,如果先创建ObjectOutputStream对象则程序正常进行,反之若先创建ObjectInputStream对象则程序会卡在创建ObjectInputStream对象时。请高手指教。
下面是截取的一部分代码

Order.java
import java.io.Serializable;

public class Order implements Serializable
{
private static final long serialVersionUID = 1234567890123L;
private String context;
public Order(String context)
{
this.context = context;
}

public String getContext()
{
return context;
}
}


Server.java
import java.io.InputStream;
import java.io.OutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server
{
private InputStream is;
private ObjectInputStream ois;
private ObjectOutputStream oos;
private OutputStream os;

public Server()
{
try
{
ServerSocket server = new ServerSocket(6000);
Socket client = server.accept();
is = client.getInputStream();
os = client.getOutputStream();

/*
oos = new ObjectOutputStream(os);
ois = new ObjectInputStream(is);
*/

ois = new ObjectInputStream(is);////////////////////////////这两行若交换位置,则程序会正常运行
oos = new ObjectOutputStream(os);////////////////////////////

Order order = (Order)ois.readObject();
System.out.println(order.getContext());
}
catch (Exception e)
{
e.printStackTrace();
}
}

public static void main(String[] args)
{
new Server();
}
}



Client.java
import java.io.InputStream;
import java.io.OutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.InetAddress;

public class Client
{
private InputStream is;
private ObjectInputStream ois;
private ObjectOutputStream oos;
private OutputStream os;

public Client()
{
try
{
Socket client = new Socket(InetAddress.getByName("localhost"), 6000);
is = client.getInputStream();
os = client.getOutputStream();
ois = new ObjectInputStream(is);
oos = new ObjectOutputStream(os);

oos.writeObject(new Order("asfd"));
}
catch (Exception e)
{
e.printStackTrace();
}
}

public static void main(String[] args)
{
new Client();
}
}
...全文
72 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
swandragon 2009-09-27
  • 打赏
  • 举报
回复
public ObjectInputStream(InputStream in)
throws IOException创建从指定 InputStream 读取的 ObjectInputStream。从流读取序列化头部并予以验证。在对应的 ObjectOutputStream 写入并刷新头部之前,此构造方法将阻塞

62,614

社区成员

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

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