Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как работать с ByteBuffer начиная с i-той позиции, Как? Где почитать? 
:(
    Опции темы
JavaCraft
  Дата 12.2.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 8.2.2007

Репутация: нет
Всего: 1



Пусть имеется аллооцированный ByteBuffer BF;
и неаллоцированная ссылка ByteBuffer bf;

Нужно подобно указателю C, сместиться на i-тую позицию и получить ссылку на ByteBuffer
Чтото типа этого

bf = *BF[100];
bf =   BF+100;

Задача такая. В BF хранится байтовый массив. Нужно встать на его конец и записать в него, начиная с конца, еще массив. Предполагается, что место под него уже имеется.
Запись в массив BF по ссылке bf будет выполняться такой функцией:

(SocketChannel)sc.read(bf);

Как это сделать на Java? Где почитать?



PM MAIL   Вверх
jsa
Дата 12.2.2007, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: нет
Всего: 20





--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
LSD
Дата 12.2.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Код
ByteBuffer BF = ByteBuffer.allocate(1024);
BF.position(100);
ByteBuffer bf = BF.slice();



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
JavaCraft
Дата 12.2.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 8.2.2007

Репутация: нет
Всего: 1



Я не вижу там примеров, как реализовать такую ссылку.
Как вернуть из буфера байтовый массив или поместить i-тый байт в массив, есть, но нужно не это.
Важно, чтобы никаких новых байтовых массивов не создавалось, а ссылка указывала на Буфер у которого тот-же массив, только начиная с i-той позиции.

Добавлено @ 13:19 
Цитата(LSD @ 12.2.2007,  13:09)
Код
ByteBuffer BF = ByteBuffer.allocate(1024);
BF.position(100);
ByteBuffer bf = BF.slice();

Извиняюсь. Это наверное то что нужно.
Я так понимаю slice() вернет ссылку на новый ByteBuffer у которого массив будет начинаться с указанной позиции в BF. И если мы запишем в bf то масив в BF также должен увеличиться?
т.е. Функция BF.limit() вернет новую длину массива?
Это действительно так?
PM MAIL   Вверх
JavaCraft
Дата 12.2.2007, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 8.2.2007

Репутация: нет
Всего: 1



И еще вопрос по этой теме.
Как реаллоцировать буфер BF, с сохранением всех данных?
Допустим, он аллоцирован на 1024, а в будущем потребовалось увеличить до 2000.

BF = BF.allocate(2000); Правильно? или еще копировать придется?
PM MAIL   Вверх
LSD
Дата 12.2.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(JavaCraft @  12.2.2007,  13:11 Найти цитируемый пост)
Я так понимаю slice() вернет ссылку на новый ByteBuffer у которого массив будет начинаться с указанной позиции в BF. И если мы запишем в bf то масив в BF также должен увеличиться?
т.е. Функция BF.limit() вернет новую длину массива?
Это действительно так?

Это будет новый ByteBuffer со своими limit, position, capacity, но данные у него будут общие с исходным буфером.

Цитата(JavaCraft @  12.2.2007,  13:57 Найти цитируемый пост)
Как реаллоцировать буфер BF, с сохранением всех данных?Допустим, он аллоцирован на 1024, а в будущем потребовалось увеличить до 2000.BF = BF.allocate(2000); Правильно? или еще копировать придется?

Конечно придется, сказано же
Цитата
The capacity of a buffer is never negative and never changes.



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0730 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.