我正在编写一个简单的Java NIO服务器,但有一个小问题:我需要将普通的
我可以使用
这对我来说造成了很大的困扰,但我不可能相信我是第一个遇到这个问题的人。
迄今为止,我想到的唯一选择是:
InputStream
管道传输给我的客户端。我有一个单独的线程执行所有的写操作,这就产生了一个问题:如果InputStream
阻塞,所有其他连接的写入都将被暂停。我可以使用
InputStream.available()
检查是否有任何可读取的传入数据而不会阻塞,但是如果已经到达流的末尾,似乎我必须调用read()
才能知道。这对我来说造成了很大的困扰,但我不可能相信我是第一个遇到这个问题的人。
迄今为止,我想到的唯一选择是:
- 为每个
InputStream
单独开辟一个线程,但这太愚蠢了,因为我一开始就使用非阻塞I/O。我也可以使用线程池来完成这个任务,但这又限制了我可以同时传输InputStream
的客户端数量。 - 使用具有超时的单独线程读取这些流(使用另一个线程在读取时间超过一定时间后中断),但这肯定会妨碍数据流,特别是当我有许多打开的
InputStream
未传输数据时。
InputStream.isEof()
或isClosed()
,那么这将不会是任何问题了 :'(