Ну, конечно, NIO создает абстракцию над некоторыми деталями. Неблокирующая IO - все еще боль, чтобы заставить Вашу голову вокруг себя (по крайней мере, я нахожу это), но по крайней мере это осуществимо. (Лично я предпочитаю .NET стиль асинхронного ввода-вывода, но это другой вопрос.)
I обычно используют блокирующий ввод-вывод: для большинства задач это все, что мне нужно, и я не получу значительного выигрыша от использования неблокирующего ввода-вывода. В некоторых случаях (например, в том, который вы упомянули) неблокируемый ввод-вывод - это действительно единственный способ продвинуться вперед, если вы хотите сохранить поток.
Я рекомендую вам узнать об этом, поиграть с ним, а затем использовать суждение, чтобы решить, когда использовать его в рабочем коде. Я бы не советовал начинать использовать его везде ...