How to find the size of a ReadableByteChannel in J

2019-09-04 15:31发布

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();

1条回答
爷的心禁止访问
2楼-- · 2019-09-04 16:12

Use Long.MAX_VALUE, or the length of the Blob if you can get it.

'Length of a ReadableByteChannel' is meaningless in general. Consider a SocketChannel whose peer never closes the connection.

查看更多
登录 后发表回答