Netty сжать самостоятельно определенный пакет - PullRequest
0 голосов
/ 08 ноября 2018

Я использую LengthFieldBasedFrameDecoder для декодирования моего пакета в следующем формате:

| len(4 bytes) | cmd(2 bytes) | binary data(variable length which is the value of "len") |

cmd означает код запроса, фиксированный 2 байта.

Иногда двоичные данные могут быть слишком большими, и я хочу сжать их в:

| len(4 bytes) | cmd(2 bytes) | compressed data(cmd + binary data) |

cmd за len установлено постоянное значение, такое как 100, которое обозначает, что части данных были сжаты.

Теперь я сделал это вручную в своем обработчике кодировщика пакетов. Я хочу спросить, может ли это быть сделано обработчиком netty вроде ZlibEncoder?

Как:

ch.pipeline().addLast(new MyPackageEncoder());
ch.pipeline().addLast(new ZlibEncoder());

Но проблема в том, что ZlibEncoder будет сжимать данные всего пакета, включая сегмент len, это нежелательно, иначе граница данных будет потеряна.

1 Ответ

0 голосов
/ 28 декабря 2018

Это не поддерживается ZlibEncoder. Вам нужно будет свернуть свой собственный кодек сжатия вручную.

...