FileDocCategorySizeDatePackage
TestStdin.javaAPI DocExample1357Mon Jan 27 10:08:22 GMT 2003com.ronsoft.books.nio.channels

TestStdin.java

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();
		}
		
	}
}