У меня есть объект ByteBuffer под названием msg
с предполагаемой длины сообщения в течение первых четырех байтов, которые я прочитал следующим образом:Чтение первых четырех байтов из ByteBuffer, а затем их запись?
int msgLen = msg.getInt();
LOG.debug("Message size: " + msgLen);
Если msgLen
меньше некоторого порогового значения, у меня есть частичное сообщение и необходимость кэш. В этом случае я хотел бы вернуть эти первые четыре байта в начало сообщения; то есть положите сообщение вместе, чтобы быть идентичным предварительному чтению. Например:
if (msgLen < threshold) {
msg.rewind();
msg.put(msgLen);
К сожалению, это не похоже на правильный способ сделать это. Я пробовал много комбинаций флип, ставить и перематывать, но должен быть недоразумением.
Как бы поместить байты обратно в буфер записи в их первоначальном порядке?
Непонятно, почему вы должны «положить» эти байты «назад»? Если вы перематываете назад, вы уже попрошайничали 'msg', полученные байты не удаляются из буфера. – Andremoniy
Если мой поток не смог перемотать, это вызовет ошибку, не так ли? Мой отладчик показывает, что операция перемотки перезагружает позицию. Andremoniy, спасибо, я думал, что байты были израсходованы на чтение. Все еще не получая намеченного поведения, но, возможно, это на моем конце. –
@GuillaumeF. ByteBuffers не являются потоками – fge