Лучший и более быстрый способ чтения строки из URL-адреса

#java #url

#java #url

Вопрос:

Я использую этот код для чтения содержимого с заданного URL. Есть ли более быстрый и лучший способ сделать это?

 private static String readUrl(String urlString) throws Exception {
    BufferedReader reader = null;
    try {
        URL url = new URL(urlString);
        reader = new BufferedReader(new InputStreamReader(url.openStream()));
        StringBuffer buffer = new StringBuffer();
        int read;
        char[] chars = new char[1024];
        while ((read = reader.read(chars)) != -1)
            buffer.append(chars, 0, read); 

        return buffer.toString();
    } finally {
        if (reader != null)
            reader.close();
    }
}
  

Комментарии:

1. Что такое «лучше»? (быстрее? менее подробный? лучшие практики?)

2. лучшая производительность, меньшее время выполнения

3. Опубликованный вами код не имеет ничего общего с JSON и не выполняет синтаксический анализ: на самом деле вы спрашиваете о быстром способе загрузки строки с заданного URL, верно?

4. ваш код в порядке. Я предполагаю, что если есть проблемы с производительностью, то они либо при генерации JSON на сервере, либо при его обработке на клиенте, но не при его фактическом чтении

5. да, мне нужно прочитать строку из URL-адреса, чтобы проанализировать ее, но является ли это хорошим способом загрузки строки с URL-адреса?

Ответ №1:

Используйте StringBuilder вместо StringBuffer

Комментарии:

1. это поможет много или мало?

2. Это будет немного быстрее. Из StringBuilder javadoc: этот класс предоставляет API, совместимый со StringBuffer, но без гарантии синхронизации. Этот класс предназначен для использования в качестве замены StringBuffer в тех местах, где строковый буфер использовался одним потоком (как это обычно бывает). Там, где это возможно, рекомендуется использовать этот класс предпочтительнее StringBuffer, поскольку он будет быстрее в большинстве реализаций .

3. Спасибо mochael667, но я ищу лучше, чем немного быстрее ;), есть идеи?

4. Единственное, что вы можете улучшить в той части кода, которую вы опубликовали, — это лучшее сетевое соединение 😉

Ответ №2:

Это HTTP-URL? Если да, то вы

  • необходимо посмотреть на Content-Type заголовок и убедиться, что вы применяете правильную кодировку к потоку. Как бы то ни было, вы применяете кодировку по умолчанию для вашей конкретной установки JVM, которая может не соответствовать тому, что отправляет сервер
  • следует посмотреть на Content-Length заголовок, чтобы предварительно изменить размер вашего буфера.

Кроме этих двух изменений, не так много возможностей ускорить байты по сети.

Редактировать: вы также можете использовать Jakarta Commmons IOUtils.toString() для чтения потока. Это уменьшит объем кода, который вам нужно написать (и может считаться полностью отлаженным). Однако по пути придется изменять размер буферов.

Ответ №3:

Ну, в Интернете есть библиотеки / исходники, которые сделают это за вас:

http://json.org/java/

Комментарии:

1. Ну, нет, я имею в виду, что код, который у вас есть, подходит для чтения с URL-адреса, но он не имеет ничего общего с JSON. Вы просто получите большую строку, содержащую JSON. Извините, я, возможно, неправильно понял ваш вопрос.

Ответ №4:

Вы также можете использовать «BufferedReader.readLine()»