The SCJD does not make you choose between RMI and NIO, as I think you suggest. The choice is between RMI and net sockets.
There are a few reasons that it makes sense to read the entire SCJD db file into a byte buffer given the character encoding--_if_ the test taker is implementing the database in a way that calls for reading in all the records. Many people don't do that, and do quite well on the exam.
I think NIO is fast and reliable. If people are interested working with areas of Java technology that might be new to them, then the SCJD offers an excellent opporunity to do that. Maybe people don't have occasion to learn NIO at their jobs; they can do so here. I think this sort of use of the cert exams is better than just getting through the thing as quickly as possible just to get the paper.
So I have a couple of questions.
What's the part where NIO is "flakey"?
How is it "clever" to use a standard Java library in the exact way it is intended to be used, to do something standard like reading bytes from a file?
I believe the SCJD project is not marked on the basis of cleverness, but rather on straight forward understandable maintainable results.
That is true. However, I fail to see what is not maintainable or understandable about using a standard library in a standard way.
NIO was included, as you know, in SDK 1.4.0, which was released 2 years ago. Since you "have used it a great deal for a long time", how exactly is NIO "bleeding edge stuff"?
I am just asking, because that is a fairly common question in this forum it seems ("Can I use NIO?", "Is it a good idea?", etc.). It is good for test takers have an understanding of the advantages and disadvantages of why/how/when to employ something.
Perhaps you have more specific reasons why test takers should avoid it?