为什么 ServerSocketChannel#bind 需要 API 级别 24?



我正在尝试在Android上打开NIO服务器套接字通道,如下所示(最小API 21)。

ServerSocketChannel.open().also {
it.bind(InetSocketAddress(0))
}

但是上面的代码给了我一个错误,说 -调用需要 API 级别 24。理论上,我可以使用ServerSocket并调用它一天,但我的客户端代码正在使用SocketChannelByteBuffer等,并且将两者混合在一起感觉像是一个糟糕的设计!

另一件让我感到困惑的事情是,我可以在最低 API 级别 21open()它,但不能在 API 级别 21bind()它,那么它有什么用途呢?

现在,我找到了另一种方法来绑定服务器套接字并仍然使用ServerSocketChannel,而无需将 API 级别更改为 24。

ServerSocketChannel.open().also {
it.socket().bind(InetSocketAddress(0))
}

我仍然对在 API 级别 24 添加ServerSocketChannel#bind的决定感到困惑。

最新更新