قمت بإنشاء كتاب طباعة مع ضبط تلقائي؛ لماذا ليس الأمر تلقائيا؟

StackOverflow https://stackoverflow.com/questions/1240968

  •  12-09-2019
  •  | 
  •  

سؤال

عميل My هو مستعرض ويب، وإرسال طلب إلى 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 ) من المفترض أن يسخر تلقائيا المخزن المؤقت الإخراج، لكنه لا يفعل ذلك. لماذا ا؟

هل كانت مفيدة؟

المحلول

من جافادوكس:

حدود:

out - مجرى الإخراج
autoFlush - منطقية؛ إذا صحيح، println, printf, ، أو format سوف طرق مسح المخزن المؤقت الإخراج

لا يقول ذلك write() سوف تدفع المخزن المؤقت الإخراج. جرب استخدام println() بدلا من ذلك، يجب أن تدفق مثلك تتوقع ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top