Я врывался в сетевую библиотеку Netty
, пытаясь научиться писать некоторый базовый сетевой код NIO, когда я столкнулся с чем-то, что не выглядело мне прямо, для цикла без чего-либо внутри, вот код :Java for (;;) loop?
for (;;) {
SocketChannel acceptedSocket = channel.socket.accept();
if (acceptedSocket == null) {
break;
}
registerAcceptedChannel(channel, acceptedSocket, thread);
}
я сразу проверил документацию учебников петель, расположенных here и не смог найти ничего, относящееся к этому заявлению.
комментирование прямо над этим кодом говорится следующее:
// accept connections in a for loop until no new connection is ready
Но это не объясняет мне, как это работает, и почему, он просто говорит, что он делает.
Если вам нужен весь метод, здесь:
@Override
protected void process(Selector selector) {
Set<SelectionKey> selectedKeys = selector.selectedKeys();
if (selectedKeys.isEmpty()) {
return;
}
for (Iterator<SelectionKey> i = selectedKeys.iterator(); i.hasNext();) {
SelectionKey k = i.next();
i.remove();
NioServerSocketChannel channel = (NioServerSocketChannel) k.attachment();
try {
// accept connections in a for loop until no new connection is ready
for (;;) {
SocketChannel acceptedSocket = channel.socket.accept();
if (acceptedSocket == null) {
break;
}
registerAcceptedChannel(channel, acceptedSocket, thread);
}
} catch (CancelledKeyException e) {
// Raised by accept() when the server socket was closed.
k.cancel();
channel.close();
} catch (SocketTimeoutException e) {
// Thrown every second to get ClosedChannelException
// raised.
} catch (ClosedChannelException e) {
// Closed as requested.
} catch (Throwable t) {
if (logger.isWarnEnabled()) {
logger.warn(
"Failed to accept a connection.", t);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// Ignore
}
}
}
}
Это бесконечный цикл. – squiguy
Каждая часть цикла 'for' является необязательной. Это можно рассматривать как цикл for-ever, так как нет никаких условий для проверки и нет шага приращения для запуска. – Makoto
..., который будет завершен с 'break;' only –