使用Java流函数检查数据是否在流中的更好解决方案?

时间:2011-07-31 12:35:25

标签: java sockets objectinputstream

我有一个需要读取数百个套接字通信的应用程序。

我正在使用一个ThreadPool,它具有线程数的上限,以便为这些套接字提供服务。如果套接字没有传入消息,则会导致所有线程阻塞。

我目前正在使用100毫秒的soTimeout来避免永久阻塞。我不喜欢这种方法,因为它可能会在它开始接收输入时超时。

还有其他方法可以解决这个问题吗?

我尝试使用ObjectInputStream.isAvailable()进行检查,但无论流中是否有数据,都会返回0。

我找不到任何其他方法来检查流上是否有数据。这将是理想的,因为我可以检查是否有数据,如果没有,则转到下一个流。

2 个答案:

答案 0 :(得分:1)

你可以给NIO一个机会。 使用Selector和SocketChannels等待数据,而不是为每个套接字创建线程。

Selector

SocketChannel

答案 1 :(得分:1)

这正是NIO框架要解决的问题。不幸的是,使用原始NIO比使用阻塞IO要困难一些。如果可以的话,我的建议是尝试一个framework like Netty,这样可以为你轻松完成工作。