powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / InputStream, скорость и кодировка.
17 сообщений из 17, страница 1 из 1
InputStream, скорость и кодировка.
    #34003772
Satrac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос из предыдущих топиков. Я получаю в InputStream страничку из инета.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
URL url =  new  URL("file:///C:/20.htm");
    	URLConnection urlc = url.openConnection();
    	InputStream is = urlc.getInputStream();
    	 char  ch;
    	String output="";
    	 int  c;
    	 while  ((c = is.read()) != - 1 ) {
            ch=( char )c;
            output+=ch;
        }
Строка обрабатывается очень долго, секунд 20 где-то. А на выходе получаю кучу крякозябликов. Как ее заставить работать быстрее и как получить русские буквы?

Сервер Tomcat 5.5.
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34003782
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
BufferedInputStream+Encoding
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34003803
mysterio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто вас учил работать с небуферризованными потоками?! Еще и так складывать строки (хотя с 1.5 уже все равно)
Быстро читать основы, а не с Томкатом возиться..
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34003881
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mysterioЕще и так складывать строки (хотя с 1.5 уже все равно)

Разве? По-моему в 1.5 такое все равно не оптимизируется. Будет в каждой итерации создаваться новый StringBuidler.
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34003909
mysterio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М. насколько мне помнится, будет создаваться один StringBuffer до цикла и в цикле аппендиться отдельные строки.
Вряд ли я ошибаюсь, иначе откуда бы я это взял.
А создание StringBuilder'а в каждой итерации это явно чушь. Почему бы тогда не оставить просто String?
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34003960
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mysterioМ. насколько мне помнится, будет создаваться один StringBuffer до цикла и в цикле аппендиться отдельные строки.
Вряд ли я ошибаюсь, иначе откуда бы я это взял.
А создание StringBuilder'а в каждой итерации это явно чушь. Почему бы тогда не оставить просто String?

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

А вот такой код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 public   class  Test 
{
    public   static   void  main(String[] args)
   {
    	String output="";
    	 int  c;
        
    	 while  (true) 
            {
                char  ch=( char )read();
               output+=ch;
            }

    }
     static   int  read()
    {
         return   0 ;
    }
}

компилируется в

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 public   class  Test
{

     public  Test()
    {
    }

     public   static   void  main(String args[])
    {
        String s = "";
         do 
        {
             char  c = ( char )read();
            s = ( new  StringBuilder()).append(s).append(c).toString();
        }  while (true);
    }

     static   int  read()
    {
         return   0 ;
    }
}

Или что я упустил?
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34003965
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В очередной раз видно, что не стоит полагаться на оптимизатор, а нужно сразу писать грамотно :)
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34004018
Satrac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сглупил со String. Со StringBuffer работает на раз. Еще раз убедился, что надо читать туториал более вдумчиво.

Но проблема с кодировкой осталась. "�а�а�а а�а�а�аЋа� а а�а�а�а�аЂ" не очень читабельно.
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34004155
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
BufferedReader is =  new  BufferedReader( new  InputStreamReader(urlc.getInputStream(), "кодировка"));
кодировка в которой поступают данные "CP1251" и т. п.
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34004974
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SatracСглупил со String. Со StringBuffer работает на раз. Еще раз убедился, что надо читать туториал более вдумчиво.

StringBuilder начиная с Java 1.5
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34005272
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему можно все значительно проще и лаконичнее.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
/**
 * Читает содержимое URL в строку с указанной кодировкой
 * @param url, encode
 */
 public   static  String readString(URL url, String encode)   throws  IOException {
    	URLConnection urlc = url.openConnection();
        InputStream is =  new  BufferedInputStream(urlc.getInputStream());
         byte [] data =  new   byte [is.available()];
        is.read(data);
        is.close();

         return   new  String(data, encode);
}


 public   static   void  main(String[] a) {
      System.out.println(readString("http://google.ru", "cp1251"));
}

...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34005287
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще нужно добавить в блок throws MalformedURLException т.к. работа идет с URL
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34005293
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
/**
 * Читает содержимое URL в строку с указанной кодировкой
 * @param url, encode
 */
 public   static  String readString(URL url, String encode)  
    throws  IOException, MalformedURLException {
    	URLConnection urlc = url.openConnection();
        InputStream is =  new  BufferedInputStream(urlc.getInputStream());
         byte [] data =  new   byte [is.available()];
        is.read(data);
        is.close();

         return   new  String(data, encode);
}


 public   static   void  main(String[] a) {
      System.out.println(readString("http://google.ru", "cp1251"));
}
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34006315
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не факт что available() вернет количество байт равное размеру скачиваемого ресурса.
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34006910
Shkel Eugene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Адназначна не вернет, будет даже иногда 0 возвращать, и тогда имеем нагрузку на процессор без полезного результата, для этого и разрабатывался заголовок HTTP в котором УКАЗЫВАЕТСЯ размер контента, т.е. заголовок парсится медленно, например по байтам, а когда известен размер контента, и есть признак конца заголовка \r\n\r\n то начинаем загружать конкретный размер - типа это быстрее будет.
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34006999
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shkel EugeneАдназначна не вернет.
как раз наоборот - неоднозначно.
для большинства сайтов возвращает нормально, проверено на практике.
...
Рейтинг: 0 / 0
InputStream, скорость и кодировка.
    #34007014
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя должен признать, что данный подход использовать не рекомендуется
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / InputStream, скорость и кодировка.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]