使用ObjectInputStream从Socket检查可用对象

时间:2014-11-05 23:56:30

标签: java object input stream server

ServerClient使用字符串进行通信时(使用BufferedReaderPrintWriter类),BufferedReader类有一个名为{{1}的方法},意味着有一个字符串等待客户端抓取和处理。此方法还使服务器由2个线程组成,这是我想要实现的。

使用ready()ObjectInputStream课程时,ObjectOutputStream课程没有“准备好”()'方法,而是它有一个名为' available()'它返回要处理的可用字节数。问题是OIS方法每次都返回0并且缺少' ready()' OIS中的方法使服务器成为多线程(每个连接加上主线程1个线程),这不是我想要的。

那么,有没有办法检查available()是否已收到""来自Server的{​​{1}} Object而不是为每个连接创建并保留ObjectInputStream

1 个答案:

答案 0 :(得分:1)

  

有没有办法检查服务器是否通过Socket从ObjectInputStream“接收”了一个Object而没有为每个连接创建并保持一个Thread?

不,因为服务器尚未'从Object上的ObjectInputStream收到Socket。直到你调用readObject(). 它才会这样做ObjectInputStream.available()总是返回零的原因是它事先不知道下一个对象有多大,所以它可以不知道它是否存在,所以它不会骗你,它只是说你可能无法读取任何东西而不会阻塞。没有解决方案。 Selector.select()不再是一个解决方案,因为它也不知道下一个对象有多大,更不用说在select()所需的非阻塞模式和阻塞之间切换的难度readObject().

所需的模式

使用专用的读线程。