2012-03-07 63 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

不要将文件直接保存到数据库。将它们保存到文件系统中,并将路径保存到数据库中的文件中。这就是文件系统的用途。如果将二进制文件填充到数据库中,您将会遇到性能问题。

相关问题