我从网上获得了一些文档,其中很多都是二进制文件(可执行文件,PDF等)。在Java中,保存二进制数据直到将其保存在数据库中的正确类型是什么?我可以为此使用字符串吗?
答案 0 :(得分:14)
使用字节数组(byte [])或InputStream(例如ByteArrayInputStream)。 Java字符串不是通用二进制数据的好容器。
Apache库commons-io有一些很好的实用程序类来处理字节和流。
e.g。 IOUtils.toByteArray(InputStream)
ByteBuffer是Java NIO的一部分,在Java 4(1.4)及更高版本中提供。在特殊情况下,它可以比使用byte []具有性能优势。它还有一些有用的便利方法。我仍然经常使用byte [],因为它更广为人知,在API中更常见,并且几乎总是表现得很好。
答案 1 :(得分:4)
答案 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)
不要将文件直接保存到数据库。将它们保存到文件系统中,并将路径保存到数据库中的文件中。这就是文件系统的用途。如果将二进制文件填入数据库,就会出现性能问题。