I am converting a blob from a database into a PDF, using Java's Channel classes. When using a Channel's transferFrom( ) method, you are supposed to specify the maximum number of bytes to be transferred.
How are you supposed to find this maximum number of bytes when ReadableByteChannels don't have a size( ) method like other Channels?
Is a ReadableByteChannel not the right tool for the job since it doesn't have a size( ) method? I'm just using Long.MAX_VALUE which doesn't seem right.
Example code:
// Get the blob in an InputStream
InputStream inStream = rs.getBinaryStream("SomeBlob");
// Create a ReadableByteChannel from that InputStream
ReadableByteChannel rbc = Channels.newChannel(inStream);
// Make a FileOutputStream to write the PDF From
FileOutputStream outStream = new FileOutputStream("MyPDF.PDF");
outStream.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
// Close stuff
inStream.close();
outStream.close();
rbc.close();
Use Long.MAX_VALUE, or the length of the
Blob
if you can get it.'Length of a
ReadableByteChannel
' is meaningless in general. Consider aSocketChannel
whose peer never closes the connection.