Десериализовать массив байтов protostuff с помощью JavaScript

Я использовал protostuff для преобразования в байтовый массив входных данных json, которые у меня есть. Код в Java:

LinkedBuffer buffer = LinkedBuffer.allocate(1024);
Schema<String> orderSchema = RuntimeSchema.getSchema(String.class);
int i = 1 ;
for(String p:poligonsStr) {               
    buffer.clear();
    byteslist.add(ProtostuffIOUtil.toByteArray(p, orderSchema, buffer));
}

Проблема в том, что я не знаю, какой алгоритм используется, и как я могу декодировать его с помощью клиента JavaScript (Node.js). Также я увидел очень хороший алгоритм Smile, реализованный для protostuff в проекте com.dyuproject.protostuff, но я хотел бы знать, как получить схему с этой библиотекой - мне это еще не удалось.

Я хотел бы знать, что лучше всего использовать: ProtostuffIOUtil или же SmileIOUtil? А как пользоваться? А как декодировать с помощью JavaScript?

1 ответ

Решение

Бинарное кодированиеprotostuff отличается от protobuf, и, насколько мне известно, на данный момент нет библиотеки JavaScript для декодирования закодированных данных protostuff.

smile не поддерживается веб-браузерами из коробки, но есть библиотеки, которые могут его декодировать.

Что касается меня, есть два оптимальных способа, как вы можете кодировать данные на сервере с помощью библиотеки Protostuff и декодировать их с помощью JavaScript на стороне клиента:

  1. Используйте кодирование protobuf, хорошо, если важен размер закодированных данных. На стороне сервера вы должны использовать ProtobufIOUtil сериализовать ваши данные в двоичный формат protobuf. На стороне клиента вы можете использовать https://github.com/dcodeIO/ProtoBuf.js/ для декодирования двоичных данных с сервера.
  2. Используйте кодировку JSON, это нативный формат для JavaScript, и обычно он будет обрабатываться быстрее, чем двоичные данные, закодированные с помощью protobuf. На стороне сервера вы должны использовать JsonIOUtil (из модуля protostuff-json) для сериализации ваших данных в текстовый формат JSON. На стороне клиента это поддерживается из коробки.

Вот пример того, как сериализовать ваш POJO в двоичный файл protobuf с помощью Protostuff: HelloService.java

Другие вопросы по тегам