January 4, 2020

OkHttp

OkHttp - библиотека для работы с сетью. Согласно статье на хабре:

OkHttp была создана для прямой работы с верхним уровнем сокетов Java, при этом не используя какие-либо дополнительные зависимости. Она поставляется в виде JAR-файла, так что разработчики могут использовать ее на любых устройствах с JVM (куда мы включаем, конечно, и Android).

Сегодня я не буду рассказывать плюсы и минусы данной библиотеки, приводить ее аналоги и т.д. Нне ради этого я пишу этот пост.

Ты обратил внимание на метод closeCodeExceptionMessage(int code) класса okhttp3.internal.ws.WebSocketProtocol. И действительно, если просто глянуть на этот метод, кажется будто он выполняет какую-то "магию", но на самом деле это просто возвращение строки.

Взглянем на декомпилированный метод:

  • Поясню, что тут происходит:
  • На вход подается переменная i
  • Если i не находится в диапазоне от 1000 до 5000, метод возвращает сообщение: "Code must be in range [1000,5000): "
  • Иначе проверяется ((i меньше 1004 или i больше 1006) и (i меньше 1012 или i больше 2999)). Если оба этих условия выполняются, то возвращается null

Иначе возвращается сообщение о том, что код занят и уже используется

sb.append("Code ");
sb.append(i);
sb.append(" is reserved and may not be used.");

К счастью, исходники у этой библиотеки открыты. Идем на GitHub и смотрим, а был ли мальчик вносились ли какие-нибудь изменения в код со стороны разработчика приложения

Как видим, код практически не отличается. Да и то, отличия кода из приложения лишь в проделанных оптимизациях со стороны компилятора. Технически же они вообще не отличаются.

Посмотрим где этот код используется. К счастью, таких мест всего несколько:

Ну и пару примеров использования

Увы. Но данный отрезок кода лишь оповещает разработчика об ошибке, которую он может допустить при разработке, но никак иначе.