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的区别相关推荐

  1. 【详解,小白也能看懂】javaweb-Servlet中, OutputStream与PrintWriter的使用和区别

    在学javaweb时, 我们会遇到两种输出方式, 一种是OutputStream,一种是PrintWriter, 那么二者有什么区别呢? OutputStream示例: String data = & ...

  2. 【发现问题】Java中PrintWriter和BufferedWriter的区别

    BufferedWriter: 将文本写入字符输出流,缓冲各个字符从而提供单个字符,数组和字符串的高效写入.通过write()方法可以将获取到的字符输出,然后通过newLine()进行换行操作.Buf ...

  3. Java PrintWriter和BufferedWriter的区别

    BufferedWriter:将文本写入字符输出流,缓冲各个字符从而提供单个字符,数组和字符串的高效写入.通过write()方法可以将获取到的字符输出,然后通过newLine()进行换行操作.Buff ...

  4. StringWriter/PrintWriter在Java输出异常信息中的作用

    闲来无事,看看JUnit的源代码.刚刚开始看就发现一段有趣的代码: public String trace() {StringWriter stringWriter = new StringWrite ...

  5. 大数据WEB阶段总结

    一.概述 HTTP协议 web容器 - Tomcat 静态web资源 - 本质上是文件 html css js 图片 音频 视频 flash- 动态web资源 - 本质上是程序 Servelt JSP ...

  6. servlet面试常问问题_50个Servlet面试问答

    servlet面试常问问题 Servlet是Java EE的一个非常重要的主题,所有Web应用程序框架(例如Spring和Struts)都建立在它之上. 这使servlet成为Java访谈中的热门话题 ...

  7. 50个Servlet面试问答

    Servlet是Java EE的一个非常重要的主题,所有Web应用程序框架(例如Spring和Struts)都建立在它之上. 这使servlet成为Java访谈中的热门话题. 在这里,我提供了50个s ...

  8. 20170922深圳长亮笔试

    SQL语言包括数据定义.数据操纵(Data Manipulation),数据控制(Data Control) 数据定义:Create Table,Alter Table,Drop Table, Cra ...

  9. 《JAVA Web技术及应用》读书笔记

    2019.06.11 第一章 JAVA Web 入门 1.1 Web应用概述 Web应用是一种通过互联网访问的应用程序,使用网页语言编写,通过浏览器运行的动静态网站.在实际应用中大多数网站采用动静结合 ...

最新文章

  1. WinCvs 操作参考手册
  2. 爱情三十一课,先信自己
  3. 【转载】快速、可伸缩和流式的AJAX代理--跨域持续内容分发
  4. 03.结构化机器学习项目 W2.机器学习策略(2)
  5. 美国只有两样东西比中国贵
  6. undefined reference to `jpeg_std_error(jpeg_error_mgr*)
  7. 《消息队列》函数讲解
  8. 第一个 Shell脚本
  9. 香港警方据线报捣破9个非法赌档 共拘捕114人
  10. 弘辽科技:淘宝店铺信用等级怎么看?信用等级怎么提升?
  11. 计算机网络中ipv6什么意思,路由器ipv6是什么意思(图文)
  12. 【Latex】记录写毕业论文时用到的操作
  13. 计算机科学内容基础,计算机科学的基础pdf
  14. makefile学习笔记
  15. SHT2x系列数字温湿度传感器
  16. 用ESP32与Python实现物联网(IoT)火焰检测报警系统
  17. 有奖互动 | 秋天的第一行代码
  18. pytorch实现 chatbot聊天机器人
  19. Ubuntu 10.04环境下载编译Android-2.2.1 (froyo) 源代码 1/2
  20. Java系列之:var关键字

热门文章

  1. VTK:选定的顶点和边用法实战
  2. JavaScript实现longest Common Substring最长公共子串算法(附完整源码)
  3. OpenCASCADE:使用 XDE 文档
  4. wxWidgets:库LIB清单
  5. 使用 Boost.MPI 的骨架和内容进行优化的示例
  6. boost::intrusive::function_hook用法的测试程序
  7. boost::hana::detail模块实现相关算法的测试程序
  8. boost::local_time模块实现自纪元以来的秒数的测试程序
  9. GDCM:gdcm::Base64的测试程序
  10. Boost:bimap双图lambda表达式的测试程序