Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Пример минимальной гранулярности блоков
Давайте немного поиграем, чтобы посмотреть, что происходит.
mount
говорит мне, что я нахожусь в разделе ext4, смонтированном в /
.
Я нахожу его размер блока с помощью:
stat -fc %s .
, что дает:
4096
Теперь давайте создадим несколько файлов с размерами 1 4095 4096 4097
:
#!/usr/bin/env bash
for size in 1 4095 4096 4097; do
dd if=/dev/zero of=f bs=1 count="${size}" status=none
echo "size ${size}"
echo "real $(du --block-size=1 f)"
echo "apparent $(du --block-size=1 --apparent-size f)"
echo
done
и результаты:
size 1
real 4096 f
apparent 1 f
size 4095
real 4096 f
apparent 4095 f
size 4096
real 4096 f
apparent 4096 f
size 4097
real 8192 f
apparent 4097 f
Итак, мы видим, что все, что ниже или равно 4096
, на самом деле занимает 4096
байтов.
Затем, как только мы пересекаем 4097
, он поднимается до 8192
, который является 2 * 4096
.
Тогда ясно, что диск всегда хранит данные на границе блока в 4096
байтов.
Что происходит с разреженными файлами?
Я не исследовал, что такое точное представление, но ясно, что --apparent
принимает это во внимание.
Это может привести к тому, что видимые размеры будут больше, чем фактическое использование диска.
Например:
dd seek=1G if=/dev/zero of=f bs=1 count=1 status=none
du --block-size=1 f
du --block-size=1 --apparent f
дает:
8192 f
1073741825 f
Связанные: Как проверить, поддерживается ли разреженный файл
] Что делать, если я хочу хранить кучу небольших файлов?
Некоторые возможности:
Библиография:
Протестировано в Ubuntu 16.04.