URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 2736
[ Назад ]

Исходное сообщение
"Помогите!!! java.io.IOException: Stream closed"

Отправлено Durward , 14-Окт-04 11:57 
Привет всем!
Использую следующий код:
try
            {
                DataScript = new URL( url );
                DataScriptConnection = DataScript.openConnection( );
                DataScriptConnection.setDoOutput( true );
                oScriptStream = new PrintStream( DataScriptConnection
                        .getOutputStream( ) );
                oScriptStream.close( );
                iScriptStream = new BufferedReader(
                        new InputStreamReader( DataScriptConnection
                                .getInputStream( ) , this.DBCharset ) );
                String strPiece = iScriptStream.readLine( );
                while ( strPiece != null )
                {
                    strData.add( strPiece );
                    strPiece = iScriptStream.readLine( );
                }
                iScriptStream.close( );
            } catch ( IOException e )
            {
                System.out.println( "Problems with url: '" + url + "' - "
                        + e.toString( ) );
            }
И периодически вылазит исключение "java.io.IOException: Stream closed",   из-за которого прога просто не может жить...
Может кто знает причину, или код криво написан???

Содержание

Сообщения в этом обсуждении
"Помогите!!! java.io.IOException: Stream closed"
Отправлено dev , 14-Окт-04 14:32 
Сначала ответ на вопрос: все правильно (в общем случае) - что прога может еще сделать, если удаленный сервер оборвал передачу?

И несколько замечаний:
1. Зря ты в этом форуме пытаешься получить помощь по Яве, поищи лучше специализированные, например http://www.rsdn.ru/
2. В catch используй e.printStackTrace(), тогда точнее увидишь, в чем ошибка.
3. По коду:

>try
>{
>    DataScript = new URL( url );
имена переменных в Яве принято писать с маленькой буквы, чтобы от классов отличать

>    DataScriptConnection = DataScript.openConnection( );

>    DataScriptConnection.setDoOutput( true );
>    oScriptStream = new PrintStream( DataScriptConnection.getOutputStream( ) );
>    oScriptStream.close( );
А это тебе зачем понадобилось? Ты же его сразу закрываешь.

>    iScriptStream = new BufferedReader(
> new InputStreamReader( DataScriptConnection.getInputStream( ), this.DBCharset ) );
Ты уверен, что метод connect() здесь уже вызван?

>    String strPiece = iScriptStream.readLine( );
>    while ( strPiece != null )
>    {
>        strData.add( strPiece );
>        strPiece = iScriptStream.readLine();
>    }

Вот так красивей и проще, хотя делает тоже самое:

String strPiece;
while((strPiece = iScriptStream.readLine()) != null) {
    strData.add(strPiece);
}