2012-03-07 19 views

回答

13

正在使用使用一個字節數組(字節[])或InputStream的(例如ByteArrayInputStream的)。 Java字符串不是通用二進制數據的良好容器。

Apache庫commons-io有一些很好的工具類來處理字節和流。

例如IOUtils.toByteArray(InputStream)


ByteBuffer引入作爲Java NIO部分,在Java 4(1.4)和後可用。在特殊情況下,它可以比使用byte []具有性能優勢。它也有一些有用的便利方法。儘管如此,我仍然通常使用byte [],因爲它更廣爲人知,在API中更常見,並且幾乎總是表現良好。

2

使用byte[]ByteBuffer如果你需要簡化的字節級操縱。

嚴格地說你可能使用一個字符串,但有很多與字符編碼相關的缺陷,所以你不應該使用字符串沒有一個很好的理由這樣做。

3

對於少量數據使用byte[],但對於二進制文件(要存儲在數據庫BLOB中),您應該使用臨時文件作爲InputStream。 JavaEE也爲上傳的文件執行此操作。對於字節[],浪費內存對於服務器性能不利。想象一下,一個webapp提供10個PDF文件,每個大約200MB。服務器需要超過2GB的RAM才能用於Web應用程序。

而且使用一個InputStream允許JDBC將數據流的數據庫(對於大多數JDBC驅動程序,而不是MySQL的,這將兩次保存數據在內存中的客戶端和服務器)。

您可能會喜歡PreparedStratementApache Commons FileUploadsetBlob()

0

不要將文件直接保存到數據庫。將它們保存到文件系統中,並將路徑保存到數據庫中的文件中。這就是文件系統的用途。如果將二進制文件填充到數據庫中,您將會遇到性能問題。

相關問題