Я получаю некоторые документы из Интернета, и многие из них представляют собой двоичные файлы (исполняемые файлы, PDF и т.д.). В Java, каков правильный тип для хранения двоичных данных до сохранения его в базе данных? Могу ли я использовать String для этого?
Какой тип лучше всего управлять двоичными данными на Java?
Ответ 1
Используйте массив байтов (byte []) или InputStream (например, ByteArrayInputStream). Строки Java не являются хорошим контейнером для общих двоичных данных.
В библиотеке Apache commons-io есть несколько полезных классов утилиты для работы с байтами и потоками.
например. IOUtils.toByteArray(InputStream)
ByteBuffer был представлен как часть Java NIO, доступный в Java 4 (1.4) и более поздних версиях. В специализированных сценариях он может иметь преимущества производительности при использовании байта []. В нем также есть некоторые полезные методы удобства. Я все еще обычно использую байт [], хотя, поскольку он более широко известен, более распространен в API и почти всегда работает достаточно хорошо.
Ответ 2
Массив byte
s
byte[]
Вот почему вы видите, что он используется в FileInputStream
Ответ 3
Для небольшого количества данных используйте byte[]
, но для двоичных файлов (для хранения в BLOB файлах) вы должны использовать временный файл как InputStream
. JavaEE также делает это для загруженных файлов. Недопустимо, чтобы производительность сервера теряла память для байта []. Представьте, что webapp предоставляет десять файлов PDF, каждый из которых составляет около 200 МБ. Серверу потребуется более 2 ГБ оперативной памяти только для webapp.
Также использование InputStream позволяет JDBC передавать данные в базу данных (для большинства драйверов JDBC, а не для MySql, которые будут хранить данные в памяти еще два раза для клиента и сервера).
Вы можете посмотреть Apache Commons FileUpload и setBlob() PreparedStratement
.
Ответ 4
Используйте byte[]
или ByteBuffer
, если вам нужна упрощенная манипуляция на уровне байта.
Строго говоря, вы можете использовать строку, но есть много ошибок, связанных с кодировкой символов, поэтому вы не должны использовать строки без повода для этого.
Ответ 5
Не сохранять файлы непосредственно в базе данных. Сохраните их в файловой системе и сохраните путь к файлу в базе данных. Для чего нужны файловые системы. У вас возникнут проблемы с производительностью, если вы будете хранить двоичные файлы в своей базе данных.