Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Существуют файловые системы и в Windows и в Linux (и другие Ose), что поддержка расширила атрибуты (EA). Поддержка Windows была добавлена для ОС/2, разделяют, и не имеет никакого зарегистрированного интерфейса, за исключением hacky метода через резервный API (это - то, что Cygwin делает). EA разработаны для хранения маленьких значений только. В Windows каждый EA имеет имя ASCII (тогда как почти все другие имена являются Unicode), и объединенный размер всех EA на файле не может быть больше, чем 64k. EA не являются файлами: Вы не можете открыть дескриптор файла для EA и считать его как нормальный файл.
Альтернативные потоки данных являются отдельной функцией, обеспеченной NTFS, который позволяет Вам обеспечивать альтернативные субфайлы в файле. Каждый файл имеет поток данных без имени по умолчанию, который автоматически открыт, если Вы не указываете альтернативный. Можно открыть дескриптор для ADS и читать (даже выполняются), это как нормальный файл, с синглом (Unicode) имя файла. ADS может быть столь же большим как любой дисковый файл.
нет никакого точного аналога к ТЕСЛАМ на Linux, о котором я знаю, но Вы можете использовать EA на порте Linux вместо этого, если значения данных являются небольшими.
Проблема с ADS состоит в том, что Windows "потеряет" те, которые ADS передает потоком второе, которое он перемещает в любую файловую систему не-NTFS. Это не считает те потоки важными, поэтому часто они не имеются в наличии. Вы найдете, что они не доступны или исчезают, когда по сетевому ресурсу при записи к CD поставил Карту памяти, и т.д.
, длинное и за исключением него, если у Вас нет очень узкого фокуса для Вашего приложения (всегда на NTFS), я избежал бы потоков ADS в целом.
Расширенные атрибуты поддерживаются некоторые файловые системы, особенно XFS, и (я думаю), JFS; но ограничены в размере (64k в XFS). Reiser4 поддерживает произвольные размерные ветвления; но это не поддерживается никаким дистрибутивом, о котором я знаю. Другая опция является ZFS, снова не очень применимым.
В конце, вероятно, более мудро просто использовать каталог.
Большинство файловых систем Linux имеет extended attributes
. Я не знаком с потоками NTFS, таким образом, я не могу сравнить два. Большинство файловых систем должно быть смонтировано с флагами для включения расширенных атрибутов, таким образом, это не может работать в общем ни на чью систему. Они обычно сокращаются как xattr
или xattrs
.
Единственная вещь, которую я знаю, который идет несколько в то направление, расширенные атрибуты , но от того, что я считал о ADS, это - определение не то же самое. Для чего точно Вы используете это?
Наиболее часто используемые файловые системы Linux не поддерживают это. Вместо этого Вы могли использовать несколько файлов, и подходящая схема именования (просто добавляют потоковый индекс к каждому имени файла, возможно), или архив, содержащий несколько файлов; Вы найдете, что такой подход лучше другими способами так или иначе - например, что происходит в Windows, если кто-то хочет создать резервную копию Windows файлов к носителю с файловой системой не-NTFS?