Я создал PrintWriter с включенной автозаполнением; почему это не автозапуск?

Мой клиент является веб-браузером и отправляет запрос на myserver, используя этот URL: http://localhost

Это код на стороне сервера. Проблема заключается в методе запуска ServingThread учебный класс.

class ServingThread implements Runnable{
    private Socket socket ;

    public ServingThread(Socket socket){
        this.socket = socket ;
        System.out.println("Receives a new browser request from "
                      + socket + "\n\n");
    }

    public void run() {
        PrintWriter out = null ;

        try {
            String str = "" ;
            out = new PrintWriter( socket.getOutputStream() ) ;
            out.write("This a web-page.") ;
            // :-(
            out.flush() ;
            // :-(
            socket.close() ;
            System.out.println("Request successfully fulfilled.") ;
        } catch (IOException io) {
            System.out.println(io.getMessage());
        }
    }
}

Использую ли я

out = new PrintWriter( socket.getOutputStream(), true ) ;

или же

out = new PrintWriter( socket.getOutputStream() ) ;

вывод не приходит в браузер. Вывод поступает в браузер только в том случае, если я вручную выполняю сброс с использованием потока

out.flush() ;

Мой вопрос: new PrintWriter( socket.getOutputStream(), true ) должен автоматически очищать буфер вывода, но это не так. Зачем?

1 ответ

Решение

Из Javadocs:

Параметры:

out - выходной поток
autoFlush - логическое значение; если это правда, println, printf, или же format методы очистят буфер вывода

Это не говорит о том, что write() очистит буфер вывода. Попробуйте использовать println() вместо этого, и он должен вспыхнуть, как вы ожидаете.

Другие вопросы по тегам