Я десериализовываю объект из файла, который составляет 350 КБ в размере и его взятие скорее долгое время. Мой TA информатики сказал мне, что существует способ использовать Буферизированного читателя наряду с ObjectInputStream для большого увеличения производительности. Я однако ничего не могу найти об этом на Google.
Вы используете украшательство для буферизации входного потока. Например, так
InputStream in = ...; // your underlying stream (e.g. FileInputStream)
ObjectInputStream oin = new ObjectInputStream(new BufferedInputStream(in));
Это гарантирует, что каждый вызов ObjectInputStream не вызывает базовый поток in
, как, например, системный вызов ОС для чтения файлов. Вместо этого каждый вызов обращается к буферизованному входному потоку, который извлекает и кэширует блоки данных (по умолчанию 8K), и читает из них. Это быстрее, поскольку чтение из потока теперь является локальным вызовом метода в java, и накладные расходы на вызов метода, связанные с системным вызовом, встречаются реже. Когерентность кэша и оптимизация JIT также играют свою роль в повышении производительности.
Нет, но вы можете использовать ObjectInputStream (InputStream in) конструктор
Для создания потока ввода буферизованного объекта путем передачи BufferedInputStream в качестве аргумента вышеуказанному конструктору.
Вот пример чтения сериализованных объектов из файла:
InputStream file = null;
try {
file = new FileInputStream("Out.test");
InputStream buffer = new BufferedInputStream(file);
ObjectInputStream in = new ObjectInputStream(buffer);
vector = (Vector)in.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally{
if(file != null ) {
file.close();
}
}
Оформить заказ по следующей ссылке:
http://java.sun.com/docs/books/performance/1st_edition/html/JPIOPerformance.fm.html