So, if you want a fundamental understanding of streams and data communication and/or a deep understanding of the Java I/O-model, don't wait, buy it.
If I had to decide the best technical book ever read by me, this would be a real candidate. In my opinion a good programming book should limit itself to covering some well-defined part of its (usually) exhaustive topic. It should be easy to read with well- chosen and short code-samples, especially for the critical parts and optionally, the code should grow throughout the chapters and evolve to full working programs at the end. This title fulfils it all.
Input and output are essential but often ignored parts of programming. Also the Java I/O model (from ver. 1.1) is powerful but not so intuitive. Here the author takes the time to first explain what a stream really is and then he builds chapter after chapter based on this fundamental 'revelation'. At the end the reader (intermediate/experienced Java-programmer) will have a deep understanding of the I/O-concept; including such special topics as streams in memory, cryptographic streams and communication with ports.
A CD or disc isn't needed as it is a joy to type the relatively few lines of code required in Java to create a primitive, but full- working web-browser, compression program or file-viewer. The book also contains the most ambitious attempt to explain the multi- lingual character set and Unicode I have read hitherto. The text also makes clear the differences between Java 1.0, 1.1 and 2.0 in this context. Such details otherwise easily will be a troublesome and long-lived source of confusion.
There aren't many illustrations throughout, but the reader will not miss them. The 'in-depth-notes' at strategic places are interesting and reveals a deep knowledge of the subject.
So, if you want a fundamental understanding of streams and data communication and/or a deep understanding of the Java I/O-model, don't wait, buy it.