Tengo una columna blob en la tabla de mi base de datos, para la cual tengo que usar byte[]
en mi programa Java como mapeo y para usar esta información debo convertirla a InputStream
o OutputStream
. Pero no sé qué sucede internamente cuando lo hago. ¿Alguien puede explicarme brevemente qué sucede cuando realizo esta conversión?Byte [] a InputStream o OutputStream
Respuesta
a crear y matriz uso de bytes de E/S arroyos de la siguiente manera:
byte[] source = ...;
ByteArrayInputStream bis = new ByteArrayInputStream(source);
// read bytes from bis ...
ByteArrayOutputStream bos = new ByteArrayOutputStream();
// write bytes to bos ...
byte[] sink = bos.toByteArray();
Suponiendo que está utilizando un controlador JDBC que implementa el estándar JDBC Blob interface (no todos lo hacen), puede también conectar una InputStream
o OutputStream
a un blob utilizando los métodos getBinaryStream
y setBinaryStream
, y también puede obtener y configurar los bytes directamente.
(En general, usted debe tomar las medidas apropiadas para manejar las excepciones y arroyos cercanos Sin embargo, el cierre de bis
y bos
en el ejemplo anterior no es necesario, ya que no están asociados con los recursos externos;. Ej descriptores de fichero, enchufes, conexiones de base de datos.)
1 - El método setBinaryStream
es realmente un captador. Imagínate.
bueno ... muy útil –
No hay conversión entre InputStream/OutputStream y los bytes con los que están trabajando. Están hechos para datos binarios, y solo leen (o escriben) los bytes uno por uno como están.
Debe realizarse una conversión cuando desee pasar de un byte a un char. Entonces necesitas convertir usando un conjunto de caracteres. Esto ocurre cuando crea Cadena o Lector a partir de bytes, que están hechos para datos de caracteres.
+1 - Iba a responder esa parte de la pregunta, pero me puse ocupado :-) –
Supongo que quiere decir que 'usar' significa leer, pero lo que explicaré para el caso de lectura se puede invertir básicamente para el caso de escritura.
por lo que termina con un byte []. esto podría representar cualquier tipo de datos que puedan necesitar tipos especiales de conversiones (caracteres, encriptados, etc.). imaginemos que quiere escribir esta información como está en un archivo.
En primer lugar, podría crear un ByteArrayInputStream que es básicamente un mecanismo para suministrar los bytes a algo en secuencia.
luego podría crear un FileOutputStream para el archivo que desea crear. hay muchos tipos de InputStreams y OutputStreams para diferentes fuentes de datos y destinos.
por último, escribiría el InputStream en el OutputStream. en este caso, la matriz de bytes se enviaría en secuencia al FileOutputStream para su escritura. Para ello recomiendo el uso de IOUtils
byte[] bytes = ...;//
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
FileOutputStream out = new FileOutputStream(new File(...));
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
y a la inversa
FileInputStream in = new FileInputStream(new File(...));
ByteArrayOutputStream out = new ByteArrayOutputStream();
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
byte[] bytes = out.toByteArray();
si utiliza los trozos de código que necesita para manejar excepciones y te recomiendo que la 'cierra' en un bloque finally .
Me doy cuenta de que mi respuesta es muy tarde para esta pregunta, pero creo que a la comunidad le gustaría a newer approach to this issue.
Los búferes circulares no resuelven el problema del OP. En la Pregunta tal como está escrita, el OP necesita el contenido * completo * en una única matriz de bytes. –
byte[] data = dbEntity.getBlobData();
response.getOutputStream().write();
Creo que esto es mejor porque ya tiene un OutputStream existente en el objeto de respuesta. no es necesario crear un nuevo OutputStream.
podemos convertir byte [] matriz en flujo de entrada mediante el uso de ByteArrayInputStream
String str = "Welcome to awesome Java World";
byte[] content = str.getBytes();
int size = content.length;
InputStream is = null;
byte[] b = new byte[size];
is = new ByteArrayInputStream(content);
Por ejemplo plena favor marque aquí http://www.onlinecodegeek.com/2015/09/how-to-convert-byte-into-inputstream.html
output = new ByteArrayOutputStream();
...
input = new ByteArrayInputStream(output.toByteArray())
- 1. Cómo convertir byte [] a InputStream?
- 2. Scala: InputStream to Array [Byte]
- 3. forma más eficiente de crear InputStream de OutputStream
- 4. Cómo pasar zócalo, InputStream, objetos OutputStream entre las actividades
- 5. ¿Por qué InputStream y OutputStream implementan Cerrar y Socket no?
- 6. ¿Hay una forma equivalente C# para Java InputStream y OutputStream?
- 7. Enchufes: BufferedOutputStream o simplemente OutputStream?
- 8. Writer o OutputStream?
- 9. Java OutputStream Omitir (desplazamiento)
- 10. ¿Cómo convertir un lector a InputStream y un escritor en OutputStream?
- 11. Cómo convertir un InputStream a un DataHandler?
- 12. Exportar Jasper Informar a PDF OutputStream?
- 13. InputStream no se cerrará, o tomará para siempre
- 14. Java - Byte [] a byte []
- 15. Java: byte [] a Byte []
- 16. OutputStream OutOfMemoryError al enviar HTTP
- 17. ¿Cómo puedo convertir un InputStream sin comprimir en un InputStream gzip'ed de manera eficiente?
- 18. Sockets de Java: DataOutputStream o OutputStream?
- 19. array [byte] a HBITMAP o CBitmap
- 20. Convertir un byte o int a BitSet
- 21. wkhtmltopdf outputstream & download - diaglog
- 22. C: sobrescribir otro byte función a byte
- 23. ¿Debo usar byte o int?
- 24. java.net.URL leer flujo a byte []
- 25. Cómo convertir InputStream a FileInputStream
- 26. Convertir InputStream (Imagen) a ByteArrayInputStream
- 27. Android InputStream Internet Disconnect
- 28. Obtener un OutputStream en una cadena
- 29. Printing Runtime exec() OutputStream a la consola
- 30. ¿Convierte un StreamWriter a OutputStream en java?
¿No debería ser el título de "matriz de bytes ... "o" byte array ... "o" byte [] ... "instaed of" byte of array ... "? – kuester2000
Vea el reverso aquí: http://stackoverflow.com/questions/1264709/convert-inputstream-to-byte-in-java –