Существует ли буферизованный ObjectInputStream? - PullRequest
10 голосов
/ 29 июля 2010

Я десериализирую объект из файла размером 350 КБ, и это занимает довольно много времени. Мой специалист по информатике сказал мне, что есть способ использовать Buffered Reader вместе с ObjectInputStream для значительного увеличения производительности. Однако я не могу найти ничего об этом в Google.

Ответы [ 2 ]

19 голосов
/ 29 июля 2010

Вы используете украшение для буферизации входного потока. Как это

   InputStream in = ...; // your underlying stream (e.g. FileInputStream)
   ObjectInputStream oin = new ObjectInputStream(new BufferedInputStream(in));

Это гарантирует, что каждый вызов ObjectInputStream не вызовет базовый поток in, такой как системный вызов чтения файла ОС. Вместо этого каждый вызов направляется в буферизованный входной поток, который выбирает и кэширует блоки данных (по умолчанию 8 КБ) и считывает их. Это быстрее, поскольку чтение из потока теперь является локальным вызовом метода в java, а накладные расходы на вызов метода системного вызова встречаются реже. Согласованность кэша и оптимизация JIT также играют роль в повышении производительности.

2 голосов
/ 29 июля 2010

Нет, но Вы можете использовать конструктор 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...