قمت بإنشاء كتاب طباعة مع ضبط تلقائي؛ لماذا ليس الأمر تلقائيا؟
-
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()
بدلا من ذلك، يجب أن تدفق مثلك تتوقع ذلك.
لا تنتمي إلى StackOverflow