Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Большинство форматов файла изображения имеет уникальные байты в запуске. Unix file
управляйте, чтобы взгляды в начале файла видели, какие данные он содержит. См. статью Wikipedia о Магических числах в файлах и magicdb.org.
Уверенный существует. Как другие упомянули, большинство изображений запускается со своего рода 'Волшебства', которое будет всегда переводить в своего рода данные Base64. Следующее является парой примеров:
Битовый массив запустится с Qk3
Jpeg запустится с /9j/
GIF запустится с R0l
(Это - нуль как второй символ).
И так далее. Не трудно взять различные типы изображения и выяснить то, к чему они кодируют. Просто будьте осторожны, поскольку у некоторых есть больше чем одна часть волшебства, таким образом, необходимо объяснить их в B64 'код перевода'.
Также file
на *отклоняют командную строку или чтение начальных байтов файла. Большинство файлов идет с уникальным заголовком в первых нескольких байтах. Например, заголовок TIFF выглядит примерно так:
0x00000000: 4949 2a00 0800 0000Для получения дополнительной информации о формате файла TIFF конкретно, если требуется знать то, что обозначают те байты, пойдите сюда.
TIFF начнутся или II или MM (порядок байтов Intel или Motorolla).
Спецификация TIFF 6 может быть загружена здесь и не слишком тверда для следования