2016-01-29 34 views
0

我使用Java的Channel類將數據庫中的Blob轉換爲PDF。當使用Channel的transferFrom()方法時,應該指定要傳輸的最大字節數。如何在Java中查找ReadableByteChannel的大小?

當ReadableByteChannels沒有像其他通道一樣的size()方法時,您應該如何找到這個最大字節數?

由於它沒有size()方法,ReadableByteChannel是不是該作業的正確工具?我只是使用Long.MAX_VALUE,這看起來不正確。

示例代碼:

// 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

使用Long.MAX_VALUE,或Blob的長度,如果你能得到它。

'ReadableByteChannel'的長度一般無意義。考慮一個SocketChannel,其同伴永遠不會關閉連接。

+0

Long.MAX_VALUE是巨大的,但我的程序似乎運行良好。它是否嘗試寫入Long.MAX_VALUE個字節,還是直到沒有剩下的字節?這是我的擔憂。 – jabe

+0

這個問題已經在你引用的Javadoc中得到了回答。它在輸入結束時停止。它還能做什麼?它不能傳輸不存在的字節。 – EJP