我从网上获取一些文件,其中许多是二进制文件(可执行文件,PDF等)。在Java中,保存二进制数据直到将其保存在数据库中的正确类型是什么?我可以为此使用字符串吗?什么类型是最好管理Java中的二进制数据?
12
A
回答
13
正在使用使用一个字节数组(字节[])或InputStream的(例如ByteArrayInputStream的)。 Java字符串不是通用二进制数据的良好容器。
Apache库commons-io有一些很好的工具类来处理字节和流。
例如IOUtils.toByteArray(InputStream)
ByteBuffer引入作为Java NIO部分,在Java 4(1.4)和后可用。在特殊情况下,它可以比使用byte []具有性能优势。它也有一些有用的便利方法。尽管如此,我仍然通常使用byte [],因为它更广为人知,在API中更常见,并且几乎总是表现良好。
4
2
使用byte[]
或ByteBuffer
如果你需要简化的字节级操纵。
严格地说你可能使用一个字符串,但有很多与字符编码相关的缺陷,所以你不应该使用字符串没有一个很好的理由这样做。
3
对于少量数据使用byte[]
,但对于二进制文件(要存储在数据库BLOB中),您应该使用临时文件作为InputStream
。 JavaEE也为上传的文件执行此操作。对于字节[],浪费内存对于服务器性能不利。想象一下,一个webapp提供10个PDF文件,每个大约200MB。服务器需要超过2GB的RAM才能用于Web应用程序。
而且使用一个InputStream允许JDBC将数据流的数据库(对于大多数JDBC驱动程序,而不是MySQL的,这将两次保存数据在内存中的客户端和服务器)。
您可能会喜欢PreparedStratement
的Apache Commons FileUpload和setBlob()。
0
不要将文件直接保存到数据库。将它们保存到文件系统中,并将路径保存到数据库中的文件中。这就是文件系统的用途。如果将二进制文件填充到数据库中,您将会遇到性能问题。
相关问题
- 1. 二进制数据是无法管理
- 2. 二进制数据的标准SQL类型是什么?
- 3. 什么数据类型适合在ActiveX方法中处理二进制数据?
- 4. 什么是最好的本地数据库管理软件?
- 5. 什么是二进制数据?
- 6. 管理数据,类或数组的最佳方法是什么?
- 7. 缓存二进制数据的最佳方式是什么?
- 8. 二进制值的数据类型是什么?它是字符串数据类型吗?
- 9. Java中的二进制文件类型
- 10. Julia中数据类型的二进制表示原理
- 11. 二进制树,其中数据是不同的继承类型
- 12. 将二进制,十六进制和八进制转换为java数据类型
- 13. 二进制plist的HTTP内容类型是什么?
- 14. 关于“二进制”数据类型
- 15. 最好的数据类型
- 16. 为什么typeof十六进制数或二进制数Uint64,而十进制数的类型是Int64?
- 17. 固定宽度二进制数据的理想字段类型
- 18. 什么是最好的方式管理混乱的数据到UITableView的部分?
- 19. 管道上游类型参数的真正好处是什么?
- 20. 在R中管理元数据的最佳方式是什么?
- 21. 什么类型的Postgres中的二进制不兼容?
- 22. 什么时候非二进制数据结构比二进制数据结构更好? (即堆,BST等)
- 23. 什么是管理Postfix的好方法?
- 24. 什么是好的,用于管理EC2的先进工具?
- 25. 什么是Java中的二进制兼容性?
- 26. 在Java十六进制数据类型
- 27. 二进制数据的十六进制编码的目的是什么?
- 28. 在Ruby中处理二进制数据的最佳实践?
- 29. 向浏览器提供二进制数据的最快方式是什么?
- 30. 从webservice返回大块二进制数据的最佳方式是什么?