Subject Why use BufferedInputStream?
Author Robert DiFalco
In the FAQ.[txt|html], there is the following code. I'm pretty sure I
have no idea why the advice is given to use a BufferedInputStream. First
of all because we are reading into a byte array.

Second, I'm not sure why one should "ever" use a BufferedInputStream
since it appears to me that the result of #getBinaryStream is already
buffered.

What am I missing? Here's the code from the FAQ.

try {

// The ByteArrayOutputStream buffers all bytes written to it
// until we call getBytes() which returns to us an array of bytes:
ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);

// Create an input stream from the BLOB column. By default,
rs.getBinaryStream()
// returns a vanilla InputStream instance. We override this for
efficiency
// but you don't have to:
BufferedInputStream bis = new BufferedInputStream(
rs.getBinaryStream("fieldblob") );

// A temporary buffer for the byte data:
byte bindata[1024];

// Used to return how many bytes are read with each read() of the
input stream:
int bytesread = 0;

// Make sure its not a NULL value in the column:
if ( !rs.wasNull() ) {
if ( (bytesread = bis.read(bindata,0,bindata.length)) != -1 ) {
// Write out 'bytesread' bytes to the writer instance:
baos.write(bindata,0,bytesread);
} else {
// When the read() method returns -1 we've hit the end of the
stream,
// so now we can get our bytes out of the writer object:
returndata = baos.getBytes();
}
}

// Close the binary input stream:
bis.close();
} catch ( IOException ioe ) {
System.err.println("Problem retrieving binary data: " + ioe);
} catch ( ClassNotFoundException cnfe ) {
System.err.println("Problem retrieving binary data: " + cnfe);
}