Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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 ");
}
}
}
Из docs:
Если кодировка не указана, возвращается исходный буфер.
blockquote>объясните
<Buffer ...>
. Укажите допустимую кодировку, напримерutf-8
, в качестве второго параметра после имени файла. Например,fs.readFile("test.txt", "utf8", function(err, data) {...});
Он возвращает объект Buffer.
Если вы хотите его в строке, вы можете преобразовать его с помощью data.toString()
:
var fs = require("fs");
fs.readFile("test.txt", function (err, data) {
if (err) throw err;
console.log(data.toString());
});
buffer.toString()
предполагает кодировку utf-8 в любом случае. Таким образом, это было бы эквивалентно (хотя и медленнее, чем) ответ @hvgotcodes.
– Brandon
23 July 2013 в 22:15
Переменная data
содержит объект Buffer
. Преобразуйте его в кодировку ASCII, используя следующий синтаксис:
data.toString('ascii', 0, data.length)
Асинхронно:
fs.readFile('test.txt', 'utf8', function (error, data) {
if (error) throw error;
console.log(data.toString());
});
Это очень важно для Google, поэтому я хотел бы добавить некоторую контекстную информацию об исходном вопросе (выделение мое):
Почему делает узел. js 'fs.readFile () возвращает буфер вместо строки?
blockquote>Поскольку файлы не всегда являются текстовыми
Даже если вы как программист знает это: Узел не знает, что находится в файле, который вы пытаетесь прочитать. Это может быть текстовый файл, но он может быть также ZIP-архивом или JPG-изображением. Node не знает.
Поскольку чтение текстовых файлов сложно
Даже если Узел знал, что он должен был читать текстовый файл, он до сих пор не знал, какая кодировка символов используется (то есть, как байты в карте файла соответствуют человеко-читаемым символам) потому что сама кодировка символов не сохраняется в файле.
Существуют способы угадать кодировку символов текстовых файлов с большей или меньшей уверенностью (это обычно делают редакторы), но вы, как правило, не хотите, чтобы ваш код полагался на догадки.
Буферы на помощь!
Итак, поскольку он не знает и не может знать все эти детали, узел просто читает файл байта для байта, не предполагая ничего о его содержимом.
Вот что такое возвращаемый буфер: unopinionated container для raw двоичного содержимого. Как это содержание следует интерпретировать, зависит от вас как разработчика.
try
fs.readFile("test.txt", "utf8", function(err, data) {...});
в основном вам нужно указать кодировку.
Async:
fs.readFile('test.txt', 'utf8', callback);
Синхронизация:
var content = fs.readFileSync('test.txt', 'utf8');