【发布时间】:2014-11-05 23:56:30
【问题描述】:
当Server和Client使用Strings进行通信时(使用BufferedReader和PrintWriter类),BufferedReader类有一个方法叫ready(),意思是有一个字符串在等待客户端抓取和处理。这种方法也使得服务器成为2线程,这是我想要实现的。
当使用ObjectInputStream 和ObjectOutputStream 类时,OIS 类没有'ready()' 方法,而是有一个名为'available()' 的方法,它返回可用字节数处理。问题是available() 方法每次都返回 0 并且 OIS 中缺少 'ready()' 方法使服务器成为多线程(每个连接 1 个线程加上主线程),这不是我想要的。
那么,有没有一种方法可以检查 Server 是否从 ObjectInputStream “接收”到 Object 而不是 Socket,而无需为每个连接创建和保存 Thread?
【问题讨论】:
-
如果您不想要每个客户端的线程比率,请使用 NIO,它使用 Selector 来查看数据是否可用或连接是否可用。您将
Selector注册到套接字。然后,您有 1 个线程检查选择器中的可用键。我有一个如何设置选择器的示例here -
@VinceEmigh 很好。我需要看一些 API,但这肯定有帮助。谢谢。
标签: java object input stream server