У меня есть столбец blob в моей таблице базы данных, который я должен использовать byte[]
в своей программе Java в качестве сопоставления, и чтобы использовать эти данные, мне нужно преобразовать его в InputStream
или OutputStream
. Но я не знаю, что происходит внутри, когда я это делаю. Может ли кто-нибудь вкратце объяснить мне, что происходит, когда я делаю это преобразование?
java
bytearray
inputstream
outputstream
GuruKulki
источник
источник
Ответы:
Вы создаете и используете потоки ввода-вывода массива байтов следующим образом:
Предполагая , что вы используете драйвер JDBC , который реализует стандартный интерфейс JDBC Blob (не во всех), вы можете также подключить
InputStream
илиOutputStream
к сгустка , используяgetBinaryStream
иsetBinaryStream
методы 1 , и вы можете также получить и установить байты непосредственно.(В общем, вы должны предпринять соответствующие шаги для обработки любых исключений и закрытия потоков. Однако в закрытии
bis
иbos
в приведенном выше примере нет необходимости, поскольку они не связаны с какими-либо внешними ресурсами; например, файловыми дескрипторами, сокетами, соединениями с базой данных.)1 -
setBinaryStream
Метод действительно является геттером. Иди разбери.источник
Я предполагаю, что вы имеете в виду, что «использование» означает чтение, но то, что я объясню для случая чтения, может быть в основном отменено для случая записи.
так что вы получите байт []. это может представлять любой тип данных, для которых могут потребоваться специальные типы преобразования (символьные, зашифрованные и т. д.). давайте представим, что вы хотите записать эти данные в файл как есть.
во-первых, вы можете создать ByteArrayInputStream, который, по сути, является механизмом для последовательной передачи байтов чему-либо.
тогда вы можете создать FileOutputStream для файла, который хотите создать. существует множество типов InputStreams и OutputStreams для разных источников данных и мест назначения.
наконец, вы должны записать InputStream в OutputStream. в этом случае массив байтов будет последовательно отправлен в FileOutputStream для записи. Для этого я рекомендую использовать IOUtils
и наоборот
если вы используете приведенные выше фрагменты кода, вам нужно будет обрабатывать исключения, и я рекомендую вам сделать «закрытие» в блоке finally.
источник
мы можем преобразовать массив byte [] во входной поток с помощью ByteArrayInputStream
Полный пример см. Здесь http://www.onlinecodegeek.com/2015/09/how-to-convert-byte-into-inputstream.html
источник
Преобразования между InputStream / OutputStream и байтами, с которыми они работают, не происходит. Они созданы для двоичных данных и просто читают (или записывают) байты один за другим как есть.
Преобразование должно произойти, когда вы хотите перейти от байта к символу. Затем вам нужно преобразовать, используя набор символов. Это происходит, когда вы создаете String или Reader из байтов, которые созданы для символьных данных.
источник
источник
Я понимаю, что мой ответ на этот вопрос слишком поздно, но я думаю, что сообществу хотелось бы более новый подход к этому вопросу .
источник
Я думаю, это лучше, поскольку у вас уже есть OutputStream в объекте ответа. нет необходимости создавать новый OutputStream.
источник