2011-01-20 91 views
9

爲什麼在ServletResponse的實例上都不能調用getWriter()getOutputStream()Java中的Servlets - getWriter()和getOutputStream()

+0

如果你想解釋爲什麼你想在一個servlet請求中調用它們,這可能會有所幫助。 – 2011-01-20 10:49:33

+0

這可能不是Abkutty想要調用兩者,而是Servlet,錯誤處理Servlet,以及一些Filter試圖寫輸出,而不是正確地協調使用哪種方法。 – Thilo 2011-01-20 10:52:20

回答

18

設計決定。 Writer和OutputStream都維護自己的緩衝區。如果你創建了一個,那麼他們的輸出將需要以某種方式合併。可能,但更復雜。所以他們決定你必須選擇是否需要基於字符的輸出或二進制輸出。

4

通常這是因爲getOutputStream()用於寫入二進制內容,而getWriter()用於寫入文本內容。將兩者寫入一個servlet請求是沒有意義的 - 您應該使用一個或另一個。

12

由於WriterOutputStream更高級別的抽象。它控制底層流的字符編碼,並且包含它自己的緩衝機制。

如果您在之前使用Writer之後直接寫入OutputStream,則由於混合字符編碼或缺少緩衝數據而導致基礎數據流損壞的風險很高。

爲了防止這種混淆,servlet API禁止在任何一個響應中使用兩者。

更實際上,您使用OutputStream編寫二進制內容,Writer用於編寫文本內容。