getOutputStream與getWriter方法

http://www.shsay.com

 

1.選擇getOutputStream 和getWriter方法的要點

PrintWriter對象輸出字符文本內容時,它內部還是將字符串轉換成了某種字符集編碼的字節數組後再進行輸出,使用PrintWriter對象的好處就是不用編程人員自己來完成字符串到字節數組的轉換。 
使用ServletOutputStream對象也能輸出內容全爲文本字符的網頁文檔,但是,如果網頁文檔內容是在Servlet程序內部使用文本字符串動態拼湊和創建出來的,則需要先將字符文本轉換成字節數組後輸出。
如果一個網頁文檔內容全部爲字符文本,但是這些內容可以直接從一個字節輸入流中讀取出來,然後再原封不動地輸出到客戶端,那麼就應該使用ServletOutputStream對象直接進行輸出,而不要使用PrintWriter對象進行輸出。

 

2.兩種方法區別

getOutputStream方法用於返回Servlet引擎創建的字節輸出流對象,Servlet程序可以按字節形式輸出響應正文。
getWriter方法用於返回Servlet引擎創建的字符輸出流對象,Servlet程序可以按字符形式輸出響應正文。
getOutputStream和getWriter這兩個方法互相排斥,調用了其中的任何一個方法後,就不能再調用另一方法。  
getOutputStream方法返回的字節輸出流對象的類型爲ServletOutputStream,它可以直接輸出字節數組中的二進制數據。
getWriter方法將Servlet引擎的數據緩衝區包裝成PrintWriter類型的字符輸出流對象後返回,PrintWriter對象可以直接輸出字符文本內容。
Servlet程序向ServletOutputStream或PrintWriter對象中寫入的數據將被Servlet引擎獲取,Servlet引擎將這些數據當作響應消息的正文,然後再與響應狀態行和各響應頭組合後輸出到客戶端。 
Serlvet的service方法結束後,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流對象是否已經調用過close方法,如果沒有,Servlet引擎將調用close方法關閉該輸出流對象。

 

3.使用

response.getOutputStream().write(data.getBytes("UTF-8"));

response.getWriter().write(data);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章