Re[3]: Обьект в масив байт
От: Географ Россия нет
Дата: 24.08.09 09:58
Оценка:
Здравствуйте, von Zeppelin, Вы писали:

VZ>Здравствуйте, Географ, Вы писали:

Г>>Я в Java обычно использую класс ByteBuffer для укладки в массив байт всех полей нужных мне данных из класса
VZ>DataInputStream, DataOutputStream еще есть ByteBuffer это все же для работы с NIO.

Согласен. Я не упомянул, что работаю обычно с RandomAccessFile напрямую, позиционируясь на упакованный объект как массив байт. И здесь ByteBuffer уместнее, позволяя ещё и буферизовать поточнее. Заказал, скажем, ByteBuffer длиной 16 килобайт и уже ощутимая прибавка в скорости. При этом возможно перепрыгнуть и назад при необходимости. Но согласен, в общем случае DataInputStream более привычен именно для Java стиля программирования. Просто я не так давно на Java перешёл, года 2 реальных, а был до этого в основном Object Pascal(Delphi), C++ и C#. Отсюда и подсознательное стредмление к низкоуровневости Но я не осуждаю, а даже приветствую Java стиль Он выигрывыает в общности, хотя и может проиграть в частностях. Но это уже философский вопрос.

Кстати, в одной из разработок обнаружил парадокс — если хранить большое количество небольших объектов (как байт-массивы) в памяти (ГИС система), их обработка при выводе (через Swing) занимает не меньше времени, чем считывание нужного набора из файлов и распаковка на лету каждый раз. При этом могу (и делаю так ) использовать только один экземпляр объекта, который себя перестраивает, наращивая нужные буфера по мере необходимости, если следующий объект превосходит по размеру (количество точек в полигоне, например) предыдущий. И потребная память не растёт, т.е. приложение становится хорошо масштабируемым. Так, можно открывать одновременно 1, 2, 3, 5... n карт и память НЕ растёт. Как была 50 мегабайт физической и 50 мегабайт виртуальной, так и остаётся. При этом отдельные файлы занимают на диске от 20 до 50 мегайбайт, а в памяти намного больше.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.