package com.ronsoft.books.nio.channels; import java.nio.ByteBuffer; import java.nio.channels.Selector; import java.nio.channels.SelectionKey; import java.nio.channels.SelectableChannel; import java.nio.channels.ReadableByteChannel; import java.util.Iterator; public class TestStdin { public static void main (String [] argv) throws Exception { Selector selector = Selector.open(); SystemInPipe stdinPipe = new SystemInPipe(); SelectableChannel stdin = stdinPipe.getStdinChannel(); ByteBuffer buffer = ByteBuffer.allocate (32); stdin.register (selector, SelectionKey.OP_READ); stdinPipe.start(); System.out.println ("Entering select(), type something:"); while (true) { selector.select (2000); Iterator it = selector.selectedKeys().iterator(); if ( ! it.hasNext()) { System.out.println ("I'm waiting"); continue; } SelectionKey key = (SelectionKey) it.next(); it.remove(); buffer.clear(); ReadableByteChannel channel = (ReadableByteChannel) key.channel(); int count = channel.read (buffer); if (count < 0) { System.out.println ("EOF, bye"); channel.close(); break; } buffer.flip(); System.out.println ("Hey, read " + count + " chars:"); while (buffer.hasRemaining()) { System.out.print ((char) buffer.get()); } System.out.println(); } } }