在Java中管理二进制数据的最佳类型是什么?

时间:2012-03-07 17:52:48

标签: java binary

我从网上获得了一些文档,其中很多都是二进制文件(可执行文件,PDF等)。在Java中,保存二进制数据直到将其保存在数据库中的正确类型是什么?我可以为此使用字符串吗?

5 个答案:

答案 0 :(得分:14)

使用字节数组(byte [])或InputStream(例如ByteArrayInputStream)。 Java字符串不是通用二进制数据的好容器。

Apache库commons-io有一些很好的实用程序类来处理字节和流。

e.g。 IOUtils.toByteArray(InputStream)


ByteBufferJava NIO的一部分,在Java 4(1.4)及更高版本中提供。在特殊情况下,它可以比使用byte []具有性能优势。它还有一些有用的便利方法。我仍然经常使用byte [],因为它更广为人知,在API中更常见,并且几乎总是表现得很好。

答案 1 :(得分:4)

byte s

的数组
byte[]

这就是您在FileInputStream

中看到它的原因

答案 2 :(得分:3)

对于少量数据,使用byte[]但对于二进制文件(要存储在数据库BLOB中),您应该使用临时文件InputStream。 JavaEE也为上传的文件执行此操作。服务器性能对于byte []浪费内存是不利的。想象一下,一个webapp提供10个PDF文件,每个大约200MB。服务器只需要为webapp提供超过2GB的RAM。

同样使用InputStream允许JDBC将数据流式传输到数据库(对于大多数JDBC驱动程序,而不是MySql,它将为客户端和服务器将数据保存在内存中两次)。

您可以查看PreparedStratement的{​​{3}}和Apache Commons FileUpload

答案 3 :(得分:2)

如果您需要简化的字节级操作,请使用byte[]ByteBuffer

严格来说,可以使用字符串,但是有很多与字符编码相关的陷阱,所以你不应该在没有充分理由的情况下使用字符串。

答案 4 :(得分:0)

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