Подтвердить что ты не робот

Какой тип лучше всего управлять двоичными данными на Java?

Я получаю некоторые документы из Интернета, и многие из них представляют собой двоичные файлы (исполняемые файлы, PDF и т.д.). В Java, каков правильный тип для хранения двоичных данных до сохранения его в базе данных? Могу ли я использовать String для этого?

4b9b3361

Ответ 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

Не сохранять файлы непосредственно в базе данных. Сохраните их в файловой системе и сохраните путь к файлу в базе данных. Для чего нужны файловые системы. У вас возникнут проблемы с производительностью, если вы будете хранить двоичные файлы в своей базе данных.