Некоторый фон:
Я работаю над некоторыми java-пакетами, которые должны собирать данные, делить их и распространять на многих серверах онлайн. По коду пользователя (человеку, использующему мои пакеты) я буду знать, какой тип буфера использовать. Я видел The Netty Project, который имеет в виду некоторые интересные концепции и другие решения, предложенные здесь на сайте, но не совсем то, что я ищу. Я думаю, что могу выполнить свои требования, но мне больше нравится повторное использование.
Фактическая проблема: требования к байтовому буферу
Отдельная реализация от интерфейса.
Изменение между двумя реализациями.
Фиксированный размер:
- Прямое использование памяти.
- Zero Copy IO при распространении.
Размер выращивания
- Может вырасти до определенного размера.
- Сохраняет баланс между перераспределением и объемом используемой памяти.
Обновление 1: решил использовать библиотеку проектов Netty из-за множества других преимуществ.
Я хотел бы рассказать немного о моей системе. Мне нужно распределить большие объемы данных по сети серверов. У меня очень мало знаний о размере моих буферов. Иногда это могут быть фиксированные размеры, иногда это может быть в режиме неизвестного размера. Я хочу быть в состоянии разработать механизм, который пользуется преимуществами обоих миров. У меня есть определенное событие, когда я получаю последний буфер для проверки.
Я понимаю, что буферы могут работать лучше, когда они напрямую отображаются в память. Нетти обеспечивает это для меня, но я не могу заставить этот буфер расти. У меня есть динамический буфер, который может расти - Netty это тоже обеспечивает.
Пара вопросов:
я должен скопировать буфер из динамического в прямой в случае его изменения? Есть ли способ переключения режимов?
Что вы думаете о реализации класса, который содержит массив ChannleBuffers и предоставляет тот же интерфейс, что и ChannleBuffer, в то время как содержит «внутри» массив буферов, выделяющих новую прямую память по мере необходимости.
Есть ли у вас другие решения?