NIO Graphical Demos

The files in this area are graphical demos
of some of the NIO APIs in action.

There are currently two demos here. Both
of these are auto-run jars. There is no need
to set the classpath. Just execute the command
java -jar whatever.jar. All the needed classes
are inside the jar files. Make sure your
execution path points to a version of the 1.4
JDK. Preferably 1.4.1+.

Buffer Demo (bufferdemo.jar):

Displays the state of ByteBuffer
and CharBuffer objects and presents
the API calls as controls on the
Window. Experiment and see how making
changes to one buffer can affect other
views of it.

The text entry widget for put() will
recognize 0xnn notation for entering
hex values. Strings longer than 1 will
be executed as bulk puts.

The GUI representation of an array is
poor, it's a simple string widget, but
it illustrates how modifying an array
changes the buffer view of it. There
is currently no support for displaying
or editing byte arrays. Maybe later.

Chat Server Select Demo (selectdemo.jar):

This demo displays the current state of
a Selector object running inside a chat
server. Click "Start Server" to start the
server thread and then connect to the
port it's listening on (default is 1234,
can be overridden as a command line argument).

Use telnet to connect: 'telnet 127.0.0.1 1234'
It works best if local echo is enabled and
linemode is active (the default on linux
and most flavors of Unix). As each
connection is recieved, you will see it
added to the Key Set, represented by rows
in the table.

The GUI imposes an artificial slowdown on
the selection process so you can see it step
through the code. You can modify or disable
the delay. You can also single-step through
the code to examine it in detail.

The commands recognized by the chat protocol
are displayed upon connection and can be
listed again by entering '/help'.

The chat server enques outbound data on a
per-channel basis and toggles interest in
OP_WRITE to activate draining the output.
Notice how the 'W' bit turns on and off
in the Interest Set. Also notice that the
values of the Ready Set are as-of the last
return from Selector.select() and retain
their old values while select() is sleeping.
The Ready Set values only have meaning while
the key is in the Selected Set.