在Java中,哪种类型最适合管理二进制数据?

16

我从网上获取了一些文档,其中许多是二进制文件(可执行文件、PDF等)。在Java中,保存这些二进制数据以便存储到数据库中时,应该使用哪种正确的类型?我能用字符串来保存吗?

5个回答

15
请使用字节数组(byte[])或输入流(例如ByteArrayInputStream)。Java字符串不适合用作通用二进制数据的容器。
Apache库commons-io有一些很好的实用程序类来处理字节和流。
例如IOUtils.toByteArray(InputStream)

ByteBufferJava NIO的一部分,自Java 4(1.4)以来可用。在特定场景下,它可以比使用byte[]具有更好的性能优势。它还具有一些有用的便捷方法。但我仍然通常使用byte[],因为它更广为人知,在API中更常见,并且几乎总是足够快。


5
一个 byte 数组
byte[]

因此,您会在相关技术中看到其被用于 FileInputStream,具体请参见FileInputStream

3

如果需要简化的字节级别操作,可以使用 byte[]ByteBuffer

严格来说,您可以使用字符串,但与字符编码相关的陷阱很多,所以除非有充分的理由,否则不应使用字符串。


3
对于少量数据,请使用byte[],但对于二进制文件(将存储在数据库BLOB中),您应该使用临时文件作为InputStream。JavaEE也会对上传的文件执行此操作。浪费byte[]内存不利于服务器性能。想象一下,一个Web应用程序提供大约200MB的十个PDF文件。服务器将需要超过2GB的RAM才能运行Web应用程序。
此外,使用InputStream允许JDBC将数据流式传输到数据库(对于大多数JDBC驱动程序,而不是MySql,它将在客户端和服务器中将数据保存在内存中两次)。
您可以查看Apache Commons FileUploadPreparedStratementsetBlob()

0
不要直接将文件保存到数据库中,而是应该将它们保存到文件系统中,并将文件路径保存在数据库中。这就是文件系统的作用。如果你把二进制文件塞进数据库中,会导致性能问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接