Obtengo algunos documentos de la web y muchos de ellos son archivos binarios (ejecutables, PDF, etc.). En Java, ¿cuál es el tipo correcto para contener los datos binarios hasta guardarlos en la base de datos? ¿Puedo usar una cadena para esto?¿Qué tipo es el mejor para administrar datos binarios en Java?
Respuesta
utilizar una matriz de bytes (byte []) o InputStream (por ejemplo ByteArrayInputStream). Las cadenas de Java no son un buen contenedor para datos binarios genéricos.
La biblioteca Apache commons-io tiene algunas buenas clases de utilidad para tratar con bytes y flujos.
p. Ej. IOUtils.toByteArray(InputStream)
ByteBuffer se introdujo como parte de Java NIO, disponible en Java 4 (1,4) y más tarde. En escenarios especializados, puede tener beneficios de rendimiento sobre el uso de un byte []. También tiene algunos métodos útiles de conveniencia. Todavía utilizo byte [], sin embargo, dado que es más conocido, más común en las API y casi siempre funciona bastante bien.
Utilice byte[]
o ByteBuffer
si necesita una manipulación simplificada del nivel de bytes.
Estrictamente hablando, podría utilizar una cadena, pero hay muchas trampas relacionadas con la codificación de caracteres, por lo que no debe usar cadenas sin una buena razón para hacerlo.
Para pequeña cantidad de datos utilizan un byte[]
pero para archivos binarios (que se almacena en bases de datos BLOB) se debe utilizar un archivo temporal como InputStream
. JavaEE también hace esto para los archivos cargados. No es bueno que el rendimiento del servidor desperdicie memoria para byte []. Imagine una aplicación web que entrega diez archivos PDF, cada uno de aproximadamente 200 MB. El servidor necesitará más de 2 GB de RAM solo para la aplicación web.
Además, el uso de InputStream permite a JDBC transmitir los datos a la base de datos (para la mayoría de los controladores JDBC, no para MySql, que almacenará los datos en la memoria dos veces más para el cliente y el servidor).
Puede echar un vistazo en Apache Commons FileUpload y setBlob() de PreparedStratement
.
No guarde los archivos directamente en una base de datos. Guárdelos en un sistema de archivos y guarde la ruta al archivo en la base de datos. Para eso están los sistemas de archivos. Obtendrá problemas de rendimiento si almacena archivos binarios en su base de datos.
- 1. ¿Qué tipo de datos es adecuado para manejar datos binarios en el método ActiveX?
- 2. ¿Cuál es el mejor tipo de datos para usar con dinero en la aplicación Java?
- 3. ¿Por qué es mejor administrar explícitamente matrices en OpenGL?
- 4. ¿Qué tipo de datos .NET es mejor para mapear el NÚMERO de tipo de datos de Oracle en NHibernate?
- 5. ¿Qué tipo de datos es mejor para almacenar artículos en la base de datos SQL?
- 6. ¿Qué colación es la mejor para el tipo de datos INT en MySQL?
- 7. La mejor manera de administrar datos redis
- 8. ¿Qué tipo de datos debe usar en C++ cuando se trabaja con bloques de datos binarios?
- 9. ¿Qué biblioteca html DOM parser para Java es la mejor?
- 10. La mejor manera de administrar la conexión de base de datos para un servlet de Java
- 11. ¿Mejor tipo para datos UTF-8?
- 12. ¿Es posible ejecutar archivos binarios en Java?
- 13. Mejor práctica para obtener el tamaño de tipo de datos (sizeof) en Java
- 14. VarBinary vs Image SQL Server ¿Tipo de datos para almacenar datos binarios?
- 15. ¿Mejor GUI para administrar MySQL 5.1?
- 16. Mejor tipo de seguridad en colecciones Java
- 17. ¿Es posible poner archivos binarios en el repositorio de nexus?
- 18. ¿Cuál es el mejor tipo de datos para monedas en MySQL?
- 19. ¿Cuál es el mejor tipo de datos para usar con dinero en C#?
- 20. ¿Cuál es la mejor manera de administrar el proceso de Unix desde Java?
- 21. C++ String de STL para datos binarios
- 22. Análisis de datos binarios ASN.1 con Java
- 23. Analizando datos binarios en C?
- 24. ¿Qué tipo de datos primitivos es time_t?
- 25. ¿Cuál es el mejor tipo de datos SQL para almacenar cadenas JSON?
- 26. ¿Qué es uintptr_t tipo de datos
- 27. Datos binarios en MySQL
- 28. Datos binarios sobre el terminal en serie
- 29. ¿Cuál es la mejor manera de devolver grandes cantidades de datos binarios de un servicio web?
- 30. ¿Por qué no hay literales binarios en Java?