The first edition of Java I/O is now seven years old, and it is definitely time for a second edition considering all that has transpired. Note that the second edition was released in May 2006, so all reviews older than that are referring to the first edition. In this second edition there are basically eight entirely new chapters added to the original seventeen. It is probably worth the price of an upgrade especially if you are interested in Java I/O as it pertains to devices. I review this second edition in the context of comparing it to the first edition.
Chapters 1 through 5 are virtually the same.
Chapter six, "Filter Streams", has had one section - Print Streams - removed and had another section on the ProgressMonitorInputStream class added. ProgressMonitorInputStream is a unique filter stream hiding in the javax.swing package that displays progress bars that indicate how much of a stream has been read and how much remains to be read, and this book shows how to use it when reading unusually large files. The section on Print Streams that was removed from chapter six now has an entire chapter dedicated to it. This is because, starting in Java 5, the familiar PrintStream class has become a lot more powerful and interesting. Besides basic console output, it now provides extensive capabilities for formatting numbers and dates in a straightforward and easy fashion.
The chapters on data streams, streams in memory, and compressing streams are virtually unchanged from the first edition. However, the "Jar Files" section from the "compressing streams" chapter has been removed and now has an entire chapter dedicated to it. In this chapter, among other topics, the author explains the Pack200 compression format and evangelizes the increasingly popular technique of hiding noncode resources like images and data files inside JAR files. The two chapters on cryptographic streams and object serialization are basically the same as before, except that one section has been added on the JavaDoc in the serialization chapter.
The next section of the book, on New I/O, is completely new material and is comprised of three chapters. The java.nio packages provide nonblocking and memory-mapped I/O, and chapters 14 through 16 cover these powerful new abilities in depth. The new I/O model is based on channels and buffers instead of streams. This model doesn't replace traditional stream-based I/O for many uses. However, it is significantly faster in one important use case: servers that process many simultaneous clients.
The next two sections of the book, "The File System" and "Text", pretty much mimic chapters 12 through 16 of the first edition.
The final section of the book, "Devices", has almost completely new material. Some of the most exciting developments since the first edition have occurred in the world of small devices,in both peripherals such as GPS receivers that connect to a host computer and devices such as Palm Pilots that are themselves increasingly powerful computers. Treatment of both of these has been dramatically expanded in this edition. For those readers working with serial and parallel port devices, the Java Communications API chapter has been upgraded to version 3.0. However, in 2006 more and more devices use faster USB ports instead. Consequently, Chapter 23 covers the new Java USB API in depth. For smaller devices that can't quite run full Java but need to perform I/O nonetheless, J2ME offers the Generic Connection Framework (GCF). Chapter 24 covers this alternative to the traditional I/O framework. Finally, Chapter 25 uses the GCF to communicate over one of the newest I/O buses, the Bluetooth API used for wireless communications with a variety of peripherals.
I was very pleased with the first edition of this book, and I have an even higher recommendation for this second edition. There are clear descriptions of how to use the Java I/O classes as well as well-commented code examples for everything. However, if you are just recently coming from a C or C++ programming perspective, the Java I/O model is so different that it will likely be a shock no matter how good the teacher is, and Mr. Harold is an excellent one. I notice that Amazon does not show the table of contents, so I do that here:
Part PART I: Basic I/O
Chapter 1. Introducing I/O
Chapter 2. Output Streams
Chapter 3. Input Streams
Part PART II: Data Sources
Chapter 4. File Streams
Chapter 5. Network Streams
Part PART III: Filter Streams
Chapter 6. Filter Streams
Chapter 7. Print Streams
Chapter 8. Data Streams
Chapter 9. Streams in Memory
Chapter 10. Compressing Streams
Chapter 11. JAR Archives
Chapter 12. Cryptographic Streams
Chapter 13. Object Serialization
Part PART IV: New I/O
Chapter 14. Buffers
Chapter 15. Channels
Chapter 16. Nonblocking I/O
Part PART V: The File System
Chapter 17. Working with Files
Chapter 18. File Dialogs and Choosers
Part PART VI: Text
Chapter 19. Character Sets and Unicode
Chapter 20. Readers and Writers
Chapter 21. Formatted I/O with java.text
Part PART VII: Devices
Chapter 22. The Java Communications API
Chapter 23. USB
Chapter 24. The J2ME Generic Connection Framework
Chapter 25. Bluetooth
Part PART VIII: Appendix