Мне было любопытно, какой способ получить ответ от сервера был лучшим и БЫСТРЫМ, скажем, если бы я использовал цикл for для загрузки URL-адреса, возвращающего XML-файл, каким образом я мог бы загрузить URL-адрес, чтобы получить ответ 10 раз подряд? скорость - это самое главное. Я знаю, что он может работать так же быстро, как ваш Интернет, но мне нужен способ загрузить URL-адрес настолько быстро, насколько это позволяет мой Интернет, а затем поместить вывод who URL-адреса в строку, чтобы я мог добавить в JTextArea .. Это код, который я использовал, но по возможности ищите более быстрые альтернативы

int times = Integer.parseInt(jTextField3.getText());

            for(int abc = 0; abc!=times; abc++){
                try {
                        URL gameHeader = new URL(jTextField2.getText());
                        InputStream in = gameHeader.openStream();
                        byte[] buffer = new byte[1024];
                    try {
                        for(int cwb; (cwb = in.read(buffer)) != -1;){
                            jTextArea1.append(new String(buffer, 0, cwb));
                        } 
                    } catch (IOException e) {}
                } catch (MalformedURLException e) {} catch (IOException e) {}
            }

Есть ли что-нибудь, что было бы быстрее, чем это?

Благодарность

-CLUEL3SS

1
CLUEL3SS 27 Авг 2011 в 11:36

3 ответа

Лучший ответ

Используйте BufferedReader; используйте буфер гораздо большего размера, чем 1024; не проглатывайте исключения. Вы также можете попробовать повторно использовать один и тот же объект URL вместо того, чтобы каждый раз создавать новый, что может помочь с объединением соединений.

Но зачем вам читать один и тот же URL 10 раз подряд?

0
user207421 27 Авг 2011 в 08:37

Это похоже на работу для Java NIO (неблокирующий ввод-вывод). Эта статья написана на Java 1.4, но все же даст вам хорошее представление о том, как настроить NIO. С тех пор NIO сильно изменился, и вам может потребоваться поискать API для Java 6 или Java 7, чтобы узнать, что нового.

Это решение, вероятно, лучше всего в качестве асинхронного варианта. По сути, это позволит вам загрузить 10 URL-адресов, не дожидаясь завершения каждого из них, прежде чем перейти к загрузке другого.

2
Ali 27 Авг 2011 в 09:33

Вы не можете загрузить текст таким образом, так как граница в 1024 байта может разбить закодированный символ на две части.

Скопируйте все данные в ByteArrayInputStream и используйте на нем toString () или прочтите текст как текст с помощью BufferedReader.

1
Peter Lawrey 27 Авг 2011 в 08:28