The DataOutputBuffer/OutputBuffer split is unnecessarily baroque.
I was thinking we should avoid the cast since that is not free at runtime, but getData and getLength are typically only called once so you're right, that's premature optimization.
Committed w/ that change and the comment reformat.
Looks good, +1 with the two following nits:
Patch inlines the relevant parts of OB into DOB. Also replaces FBOS+getBytes with DOB+getData in a couple places that look performance-sensitive-ish.