@NotNull
  public static <K, V> Map<K, V> readMap(@NotNull DataInput in,
                                         @NotNull ThrowableComputable<? extends K, ? extends IOException> readKey,
                                         @NotNull ThrowableComputable<? extends V, ? extends IOException> readValue) throws IOException {
    int size = readINT(in);
    Map<K, V> result = new HashMap<>();
    for (int i = 0; i < size; i++) {
      result.put(readKey.compute(), readValue.compute());
    }
    return result;
  }
@NotNull
  public static <K, V> Map<K, V> readMap(@NotNull DataInput in,
                                         @NotNull ThrowableComputable<? extends K, ? extends IOException> readKey,
                                         @NotNull ThrowableComputable<? extends V, ? extends IOException> readValue)