LinkedHashMap находится в этом ответе - этот ответ является потоком объектов (т. Е. Вместо JSON, если одно и то же значение появляется дважды, оно будет сериализовано только один раз, что позволяет уменьшать содержимое, а также позволяет использовать циклические ссылки вместо только плоское дерево).
Чтение полезной нагрузки RPC выполняется «в обратном направлении» - начиная с конца и читая в обратном направлении, мы начинаем с 7 (версия), 0 (установленные флаги), большого []
строк (строка « table ", строки, необходимые для декодирования ответа, чтобы каждая строка была указана только один раз).
Тогда a 1
- первый объект в потоке - это тип первой записи в таблице строк, т. Е. "java.util.LinkedHashMap/3008245022"
, как вы ищете. Чтобы декодировать LinkedHashMap, нам сначала нужно узнать, как он упорядочен - следующее значение 0
говорит нам, что он использует значение по умолчанию «insert-order», а затем следующее 2
говорит, что в карта.
Теперь мы повторяем, пока не увидим две пары ключей и значений. Следующее значение скажет нам, какой тип ключа мы ищем: 2
означает, что нужно перейти в таблицу строк, и мы увидим "java.lang.String/2004016611"
, поэтому мы знаем, что это будет строка, тогда 3
покажет нам "AA"
также из таблицы строк. Затем 4
, тип значения для этого ключа, как и ожидалось, это "java.util.Date/3385151746"
из таблицы строк. Чтобы десериализовать дату, мы читаем long
из полезной нагрузки - GWT base64 кодирует их, чтобы уменьшить их размер - это 'WM577vZ'
, следующий токен.
Следующие 4 токена (2
, 5
, 4
и 'WM577vZ'
) повторяют этот процесс, добавляя второй строковый ключ к карте и значение даты для нее.
-
Эта конкретная полезная нагрузка не является той, которая действительно показывает мощность RPC, но ее довольно просто прочитать вручную. Расшифровка их вне GWT-приложения в настоящее время не очень проста (хотя я работаю над обобщенным инструментом, который должен позволять декодировать его где угодно, но на самом деле ответ SO - не то место, где можно об этом говорить) - если вы хотите формат, который может обрабатываться обычным JS или какой-либо другой технологией, не относящейся к GWT, в настоящее время RPC, вероятно, не является вашим лучшим выбором.