Stellen Sie sich einen Socket-Kanal mit 32-KB-Socket-Empfangspuffer vor.NIO: OP_READ und nicht alle Daten lesen; bleibt OP_READ in Bereitschaft?
24KB Daten werden empfangen, und das OP_READ wird im Bereit-Set gesetzt und ein IO-Thread wird benachrichtigt, um die eingehenden Daten zu verarbeiten.
Normalerweise wird der Socketchannel.read mit einem Bytepuffer aufgerufen, der den Inhalt des Socket-Empfangspuffers vollständig speichern kann.
Aber jetzt meine Frage:
Was passiert, wenn die ByteBuffer nicht groß genug ist, um alle Daten zu lesen, z. ein Bytepuffer von 16 KB, und daher bleiben 8 KB im Socket-Empfangspuffer. Wird das OP_READ aus dem Ready-Set entfernt oder bleibt das OP_READ im Ready-Set, solange Daten im Socket-Buffer des Sockets verbleiben.