sockets程序在Java中初始化对象输入流时暂停
在运行调试器时,程序会暂停初始化来自服务器主输入输出流的对象流。代码如下:
public TFileReader(Client cli)throws Exception{
this.cli = cli;
fileSock = new Socket(cli.ServerIp(), cli.FilePort());
fobjIn = new ObjectInputStream(fileSock.getInputStream());
fobjOut = new ObjectOutputStream(fileSock.getOutputStream());
fobjOut.flush();
}
@Override
public void run(){
try{
System.out.println("file reader thread online");
fobjOut.writeObject(cli.Name());
fobjOut.flush();
String per = (String) fobjIn.readObject();
System.out.println(per+"video filing...");
if(!per.equals("OKF"))
{
throw new Exception("Error In retriving video.");
}
它在fobjIn
上暂停,不执行fobjOut
,尽管fobjIn
它从fobjIn
断点经过,但没有击中断点
# 1 楼答案
我会这么简单
# 2 楼答案
问题是ObjectInputStream在初始化时预读取数据
首选的解决方案是在Java Creating a new ObjectInputStream Blocks:在初始化ObjectInputStream之前,始终初始化ObjectOutputStream,这样就可以启动两个用户在内部使用的“握手”
当您不控制所有代码并且不能更改顺序时,考虑延迟OIS初始化直到数据可用(输入流。可用或在缓冲流上标记/读取/重置,等等)。p>