||New Reviews| |Software Methodologies| |Popular Science| |AI/Machine Learning| |Programming| |Java| |Linux/Open Source| |XML| |Software Tools| |Other| |Web| |Tutorials| |All By Date| |All By Title| |Resources| |About||
Keywords: Java, J2SE, J2ME, input/output
Title: Java I/O
Author: Elliotte Rusty Harold
Verdict: An excellent tutorial and reference.
A whole book on Java I/O? You've got to be kidding, right? How complicated can I/O be? Well, the answer is, when you've got multiple platforms, multiple locales, different media and unicode to deal with then I/O really is complicated. For the Java developer there's plenty of support, however. The Java platform comes with an abundance of libraries, packages and of course it supports unicode by default. And who better to help navigate the different libraries and packages than Elliote Rusty Harold, author of 'Processing XML With Java', 'Java Network Programming' and a slew of other top quality books, as well as being the developer of the XOM framework.
The first thing to note is that the book covers an extremely wide range of material. In addition to the obvious topics of streams and files, there is coverage of AWT and Swing file dialogs, unicode encodings, different file systems, object serialisation, archives and compression. There is even coverage of I/O on mobile platforms using J2ME. If nothing else the book manages to look at pretty much everything related to input and output in Java. Note also that the book is fully up to date, and covers both Java 5.x and Java 6.0 (aka Mustang).
But it's not just the breadth of material that is impressive, the author makes sure that all of the topics are covered in some depth. There's little in the way of skimming over tricky topics, instead Harold takes pains to make sure that things are covered in sufficient detail. And detail there is in plenty, enabling the practising developer to tackle a topic - say, the difference between big-endian and little-endian file data - in enough depth to understand the issues and know how to apply code to the problem.
The sample code is a mixture of small, illustrative programs, short snippets and one longer application that is developed across several of the chapters. The latter application is a graphical file viewer that does an excellent job of drawing together a number of different topics - file encodings, data type conversions (dec to hex, for example), unicode, file systems, the Swing JFileChooser component and so on. Not only does this application do a fantastic job as a teaching tool, it's also a pretty useful utility for real work.
The quality of the code is more than matched by the quality of the writing. Harold has a good writing style - he writes clearly and authoritatively without sounding dry or academic. He does a nice line is acerbic asides, pointing out inconsistencies in APIs or criticising particular design decisions. It all makes for an engaging and interesting read.
There's little more to say other than that this is clearly a definitive resource. It's a tutorial and a reference that is both readable and has high technical quality. When coming to Java for the first time the array of different libraries and classes can be confusing. Not only does this book help navigate that array of APIs, it also explains why they exist, why they work the way they do and when they should be used. It earns a very solid TechBookReport recommendation.