Eu tenho uma coluna de blob na minha tabela de banco de dados, para a qual tenho que usar byte[]
no meu programa Java como um mapeamento e, para usar esses dados, tenho que convertê-lo em InputStream
ou OutputStream
. Mas não sei o que acontece internamente quando faço isso. Alguém pode me explicar brevemente o que está acontecendo quando eu faço essa conversão?
java
bytearray
inputstream
outputstream
GuruKulki
fonte
fonte
Respostas:
Você cria e usa fluxos de E / S da matriz de bytes da seguinte maneira:
Supondo que você esteja usando um driver JDBC que implemente a interface padrão do JDBC Blob (nem todos o fazem), você também pode conectar um
InputStream
ouOutputStream
um blob usando os métodosgetBinaryStream
e 1 , e também pode obter e definir os bytes diretamente.setBinaryStream
(Em geral, você deve executar as etapas apropriadas para lidar com quaisquer exceções e fechar fluxos. No entanto, o fechamento
bis
ebos
o exemplo acima são desnecessários, pois eles não estão associados a nenhum recurso externo; por exemplo, descritores de arquivo, soquetes, conexões com o banco de dados.)1 - O
setBinaryStream
método é realmente um getter. Vai saber.fonte
Estou assumindo que você quer dizer que 'use' significa leitura, mas o que vou explicar para o caso de leitura pode ser basicamente revertido para o caso de gravação.
então você acaba com um byte []. isso pode representar qualquer tipo de dados que possa precisar de tipos especiais de conversões (caracteres, criptografados etc.). vamos fingir que você deseja gravar esses dados como estão em um arquivo.
Em primeiro lugar, você pode criar um ByteArrayInputStream, que é basicamente um mecanismo para fornecer os bytes a algo em sequência.
você pode criar um FileOutputStream para o arquivo que deseja criar. existem muitos tipos de InputStreams e OutputStreams para diferentes origens e destinos de dados.
Por fim, você escreveria o InputStream no OutputStream. nesse caso, a matriz de bytes seria enviada em sequência para o FileOutputStream para gravação. Para isso, eu recomendo usar IOUtils
e ao contrário
se você usar os trechos de código acima, precisará lidar com exceções e eu recomendo que você faça o 'fechamento' em um bloco final.
fonte
podemos converter a matriz de bytes [] em fluxo de entrada usando ByteArrayInputStream
Para obter um exemplo completo, consulte aqui http://www.onlinecodegeek.com/2015/09/how-to-convert-byte-into-inputstream.html
fonte
Não há conversão entre InputStream / OutputStream e os bytes com os quais eles estão trabalhando. Eles são feitos para dados binários e apenas leem (ou escrevem) os bytes um a um como estão.
Uma conversão precisa ocorrer quando você deseja passar de byte para char. Então você precisa converter usando um conjunto de caracteres. Isso acontece quando você cria String ou Reader a partir de bytes, criados para dados de caracteres.
fonte
fonte
Percebo que minha resposta está muito atrasada para esta pergunta, mas acho que a comunidade gostaria de uma abordagem mais nova para esse problema .
fonte
Eu acho que isso é melhor, pois você já possui um OutputStream existente no objeto de resposta. não é necessário criar um novo OutputStream.
fonte