当Server
和Client
使用字符串进行通信时(使用BufferedReader
和PrintWriter
类),BufferedReader
类有一个名为{{1}的方法},意味着有一个字符串等待客户端抓取和处理。此方法还使服务器由2个线程组成,这是我想要实现的。
使用ready()
和ObjectInputStream
课程时,ObjectOutputStream
课程没有“准备好”()'方法,而是它有一个名为' available()'它返回要处理的可用字节数。问题是OIS
方法每次都返回0并且缺少' ready()' OIS中的方法使服务器成为多线程(每个连接加上主线程1个线程),这不是我想要的。
那么,有没有办法检查available()
是否已收到""来自Server
的{{1}} Object
而不是为每个连接创建并保留ObjectInputStream
?
答案 0 :(得分:1)
有没有办法检查服务器是否通过Socket从ObjectInputStream“接收”了一个Object而没有为每个连接创建并保持一个Thread?
不,因为服务器尚未'从Object
上的ObjectInputStream
收到Socket
。直到你调用readObject().
它才会这样做ObjectInputStream.available()
总是返回零的原因是它事先不知道下一个对象有多大,所以它可以不知道它是否存在,所以它不会骗你,它只是说你可能无法读取任何东西而不会阻塞。没有解决方案。 Selector.select()
不再是一个解决方案,因为它也不知道下一个对象有多大,更不用说在select()
所需的非阻塞模式和阻塞之间切换的难度readObject().
使用专用的读线程。