Не уверен, пропустили ли вы это или нет, но в статье четко сказано, что никакие обычные утилиты ввода-вывода не включатся и выйдет, чтобы представить пример кода для чтения и записи текста по асинхронным каналам.Вот соответствующая выдержка:
Проблема с этим кодом состоит в том, что PrintWriter блокирует ввод-вывод и не поддерживает базовые механизмы асинхронного ввода-вывода.Чтобы решить эту проблему, мы не можем использовать какие-либо стандартные утилиты ввода / вывода, но вместо этого должны обернуть наше сообщение в объект ByteBuffer и отправить его через объект SocketChannel
Этот код не работает вваш случай?
Вы сказали:
Я пытаюсь выяснить, как преобразовать объект в байт [].Строки имеют метод getBytes ().Я не уверен, что использовать для общего сериализуемого объекта.Я использую классы ObjectOutput / InputStream, но, согласно статье, если я их использую, он снова будет блокироваться.Я правильно это понимаю?
Вы правы;Обтекание потоков ввода / вывода ObjectInputStream
/ ObjectOutputStream
снова приведет к блокировке.Решение здесь может заключаться в том, чтобы обернуть ByteArrayOutputStream
в ObjectOutputStream
и записать ваши объекты в базовый байтовый массив.Этот базовый байтовый поток / массив теперь имеет байтовое представление (которое очевидно следует спецификации Java-сериализации) вашего объекта.С этого момента это нормально с NIO.В случае, если вам интересно, есть несколько хороших обсуждений здесь и здесь , связанных с тем, о чем я говорю.
РЕДАКТИРОВАТЬ: Кроме того, я согласен сАвтор статьи, что NIO сложно получить право.Автор рекомендует Apache Mina, но я хотел бы добавить еще одну рекомендацию, «Jboss Netty».Автор Netty часто посещает SO, поэтому вы можете получить ответы на свои запросы.
Я также хотел бы отметить, что если ваша мотивация заключается в отправке через объекты Java, используйте инфраструктуру, которая настроена на эти потребности, то есть JavaRMI или JBoss удаленное взаимодействие.Гораздо проще, чем возиться с потоками объектов и т. Д.