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

问题描述

我正在尝试在Android(最低API 21)上打开NIO服务器套接字通道。

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

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

让我感到困惑的另一件事是,我可以在最低API级别21上open(),但不能在bind() API级别21上{{1}},那么它的作用是什么?

解决方法

就目前而言,我找到了一种替代方法来绑定服务器套接字,并且仍然使用ServerSocketChannel而不将API级别更改为24。

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

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