PrintWriter和ServletOutputStream的区别
1. PrintWriter是以字符為單位,對所有的信息進行處理,而ServletOutputStream僅對二進制的資料進行處理。
2. PrintWriter在輸出字符文本時內部需要將字符串轉換成某種字符集編碼的字節數組,使用他的好處就是不需要自己來完成從字符串到字節數組的轉換。轉換的字符集編碼是通過設置setContentTpye或setCharacterEncoding或setLocale等方法實現的;使用ServletOutputStream對象直接從一個字節輸入流中讀取出來,然后再原封不動的輸出到客服端。
3. 這兩個方法相互排斥,只能調用其一,如果要用,則要在換方法之前調用flush(),將緩沖區數據沖掉。
4. PrintWriter自動清空緩沖區的功能被使能時(構造函數中autoFlush置為true),僅當println()方法被調用時才自動清緩沖區,而不是像PrintStream一樣遇到一個換行符就清緩沖。
兩種方法的取舍:
使用PrintWriter會占用一些系統開銷,因為它是為處理字符流的輸出功能。因此PrintWriter應該使用在確保有字符集轉換的環境中。換句話說,在你知道servlet返回的僅僅是二進制數據時候,應該使用ServletOutputStream,這樣你可以消除字符轉換開銷,當servlet容器不用處理字符集轉換的時候。
前臺頁面請求圖片處理顯示。
<td valign="top" rowspan="5" width="16%"> <img src="${ctx }/departmentAction.do?dispatch=getDeptPic&id=${deptForm.department.deptId }" height="143" width="103"> </td>
后臺圖片顯示處理
ServletOutputStream sout = response.getOutputStream(); sout.write(dept.getDeptIcon());// 將緩沖區的輸入輸出到頁面 sout.flush(); // 輸入完畢,清除緩沖 sout.close();//關閉流
附:寫文件最佳組合
PrintWriter out = new PrintWriter( new BufferedWriter( new FileWriter(filename))) PrintWriter 提供print系方法
BufferedWriter 提供緩沖,用以加速
FileWriter 用于寫文件
總結
以上是生活随笔為你收集整理的PrintWriter和ServletOutputStream的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 刘老师在买测温枪共花了390元你知道刘老
- 下一篇: Spring中AbstractComma