Tengo una columna de 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 tengo que convertirla en InputStream
o OutputStream
. Pero no sé qué sucede internamente cuando lo hago. ¿Alguien puede explicarme brevemente qué sucede cuando hago esta conversión?
java
bytearray
inputstream
outputstream
GuruKulki
fuente
fuente
Respuestas:
Puede crear y utilizar secuencias de E / S de matriz de bytes de la siguiente manera:
Asumiendo que usted está utilizando un controlador JDBC que implementa el estándar de interfaz JDBC Blob (no todos lo hacen), puede también conectar una
InputStream
oOutputStream
a una burbuja con elgetBinaryStream
ysetBinaryStream
métodos 1 , y también se puede obtener y establecer los bytes directamente.(En general, debe tomar los pasos apropiados para manejar cualquier excepción y cerrar las secuencias. Sin embargo, cerrar
bis
ybos
en el ejemplo anterior es innecesario, ya que no están asociados con ningún recurso externo; por ejemplo, descriptores de archivos, sockets, conexiones de bases de datos).1 - El
setBinaryStream
método es realmente un captador. Imagínate.fuente
Supongo que quiere decir que 'usar' significa leer, pero lo que explicaré para el caso de lectura se puede revertir básicamente para el caso de escritura.
entonces terminas con un byte []. Esto podría representar cualquier tipo de datos que puedan necesitar tipos especiales de conversiones (caracteres, cifrados, etc.). Supongamos que desea escribir estos datos tal como están 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.
entonces podría crear un FileOutputStream para el archivo que desea crear. Existen muchos tipos de InputStreams y OutputStreams para diferentes fuentes de datos y destinos.
Por último, escribiría InputStream en OutputStream. en este caso, la matriz de bytes se enviaría en secuencia a FileOutputStream para su escritura. Para esto recomiendo usar IOUtils
y a la inversa
si usa los fragmentos de código anteriores, deberá manejar las excepciones y le recomiendo que haga los 'cierres' en un bloque finalmente.
fuente
podemos convertir la matriz byte [] en flujo de entrada usando ByteArrayInputStream
Para ver un ejemplo completo, consulte aquí http://www.onlinecodegeek.com/2015/09/how-to-convert-byte-into-inputstream.html
fuente
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 tal como están.
Una conversión debe suceder cuando desea pasar de byte a char. Entonces necesitas convertir usando un juego de caracteres. Esto sucede cuando crea String o Reader a partir de bytes, que están hechos para datos de caracteres.
fuente
fuente
Me doy cuenta de que mi respuesta llega tarde a esta pregunta, pero creo que a la comunidad le gustaría un enfoque más nuevo sobre este tema .
fuente
Creo que esto es mejor ya que ya tiene un OutputStream existente en el objeto de respuesta. no es necesario crear un nuevo OutputStream.
fuente