Кодирование данных в URL для эффективного транспорта - PullRequest
1 голос
/ 07 сентября 2010

Я ищу библиотеку, которая может кодировать данные в URL, потому что использование простого "& param = value" неэффективно.

Я ищу библиотеку, которая примет определенный набор параметров и закодирует его в формат, безопасный для отправки по запросу HTTP GET. Я буду использовать это для отправки событий отслеживания от моего игрока на сервер.

Я помню, как читал в одном посте блога, что Chrome использует хорошую библиотеку для кодирования данных при отправке статистики обратно на серверы Google, эта библиотека была недавно открыта Google. Увы, я не могу найти его и не помню, как его зовут :) 1005 *

Спасибо за помощь, Максим.

Ответы [ 3 ]

0 голосов
/ 07 сентября 2010

Что вы подразумеваете под

при использовании простого "¶m = value" неэффективно.

?

Мне кажется, что любойбиблиотека, которую вы используете, под обложками будет просто использовать манипуляции со строками для построения URL, поэтому я изо всех сил пытаюсь понять, почему вы думаете, что использование такой библиотеки будет более эффективным.

Какие измерения вы предприняли для тестированиятвоя гипотеза?Какой уровень производительности вам нужен?

0 голосов
/ 07 сентября 2010

Если вы хотите быстрое и грязное решение, я могу предложить следующее:

Если:

  • ваш набор параметров фиксирован (или вы можете указать набор параметров с помощью некоторого короткого идентификатора)

Do:

  1. Удалите заголовок имени параметра объедините все в String, byte [] или аналогичные так, чтобы вы могли декодировать его позже :) Я должен избегать сериализации Java, потому что он включает в себя много информации. Я бы попробовал что-то простое, например DataOutputStream.write Тип . Легко писать и просто читать.
  2. Удалить избыточность данных Zip it. Используйте java.util.zip.GZipOutputStream. Вот почему я предпочитаю шаг 1 для генерации представления byte []!
  3. Сделать это URL-дружественным . Здесь вы увеличите размер в байтах, который вам нужен. Поэтому постарайтесь сделать это с наименьшими затратами. Я должен попробовать с Base64. Он заархивирован, поэтому он не избыточен (он использует наименьшее возможное пространство). Таким образом, единственный шанс - использовать представление, которое не занимает слишком много места. Гекса удвоит размер. Но Base64 только добавляет 33%.

Эти шаги не сложны.

  1. Использует пользовательский класс. Возможно альтернативный метод сериализации , чтобы его было проще вызывать.
  2. Использует java.util.zip.GZipOutput / InputStream. Это просто.
  3. Использует некоторую библиотеку кодирования / декодирования Base64. Прямо тоже.

Надеюсь, это поможет!

0 голосов
/ 07 сентября 2010

Вы имеете в виду кодировку URL?Затем вы можете использовать java.net.URLEncoder#encode(String,String) для URL-кодирования строки с заданной кодировкой (например, «UTF-8»).

...