`
xifangyuhui
  • 浏览: 188974 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PrintWriter和ServletOutputStream的区别

阅读更多

刚刚看到《java Servlet programming》中讲到PrintWriter部分时,作者说道:

"Servlet uses the getWriter() method to retrieve a PrintWriter, the international-friendly counterpart to a
PrintStream. PrintWriter converts Java's Unicode characters to a locale-specific encoding. For an
English locale, it behaves same as a PrintStream.
"

上网搜了搜,找到下面的内容,原来没怎么在意这两者的区别,现在补补:

1. PrintWriter是以字符为单位,对所有的信息进行处理,而ServletOutputStream仅对二进制的资料进行处理。 
2.  PrintWriter在输出字符文本时内部需要将字符串转换成某种字符集编码的字节数组,使用他的好处就是不需要自己来完成从字符串到字节数组的转换。 转换的字符集编码是通过设置setContentTpye或setCharacterEncoding或setLocale等方法实现的;使用ServletOutputStream对象直接从一个字节输入流中读取出来,然后再原封不动的输出到客服端。
3. 这两个方法相互排斥,只能调用其一,如果要用,则要在换方法之前调用flush(),将缓冲区数据冲掉。
4. PrintWriter自动清空缓冲区的功能被使能时(构造函数中autoFlush置为true),仅当println()方法被调用时才自动清缓冲区,而不是像PrintStream一样遇到一个换行符就清缓冲。 

两种方法的取舍:
使用PrintWriter会占用一些系统开销,因为它是为处理字符流的输出输出功能。因此PrintWriter应该使用在确保有字符集转换的环境中。换句话说,在你知道servlet返回的仅仅是二进制数据时候,应该使用ServletOutputStream,这样你可以消除字符转换开销,当servlet容器不用处理字符集转换的时候。

附:写文件最佳组合   
  PrintWriter   out   =   new   PrintWriter(   
          new   BufferedWriter(   
                new   FileWriter(filename)))   
  PrintWriter   提供print系方法   
  BufferedWriter   提供缓冲,用以加速   
  FileWriter   用于写文件

 

转自:http://wuhenjia.blog.163.com/blog/static/9346944920109205357403/

分享到:
评论

相关推荐

    Servlet输出中文乱码的新收获

    解决方法是使用 ServletOutputStream 输出中文字符,而不是使用 PrintWriter。ServletOutputStream 不受字符编码的限制,可以在输出中文字符时指定字符编码。 下面是一个使用 ServletOutputStream 输出中文字符的...

    httpServletResponse学习

    (2)使用 ServletOutputStream 对象也能输出内容全为文本字符的网页文档,但是如果网页文档内容是在 Servlet 程序内部使用文本字符串动态拼凑和创建出来的,则需要将字符文本转换成字节数组后输出,这是就不如 ...

    java静态网页

    在这个例子中,创建了自定义的 `ServletOutputStream` 和 `PrintWriter` 实例,用于捕获JSP页面渲染后的输出。 5. **文件输出流 FileOutputStream**: - 使用 `FileOutputStream` 将Servlet输出流的内容写入到指定...

    jsp生成静态页面的方法

    - 自定义`ServletOutputStream`和`PrintWriter`对象,以便将输出内容重定向到内存中。 - 将内存中的内容写入到硬盘上,生成静态HTML文件。 #### 应用场景 这种方法适用于需要定期更新大量静态页面的场景,如新闻...

    JSP生成静态页面[归类].pdf

    // 创建字节数组输出流和ServletOutputStream的包装类,用于捕获JSP的输出 final ByteArrayOutputStream os = new ByteArrayOutputStream(); final ServletOutputStream stream = new ServletOutputStream() {......

    HttpServletRequest-response方法总结

    2. getOutputStream():从Servlet中可以通过getOutputStream方法取得ServletOutputStream对象,既可以输出字符数据,也可以输出MIME格式的二进制数据。 3. setContentType():在响应中可以表明内容格式和长度。 4. ...

    java filter打印请求返回参数

    这种方法不仅能够帮助我们更好地理解和调试程序逻辑,还能为后续的日志记录和性能分析提供有用的信息。此外,通过对请求和响应的封装,我们还能解决一些常见的编码问题,提高系统的健壮性和用户体验。

    java过滤器中修改一个http请求的返回内容.pdf

    而`HttpServletResponseWrapper`是HttpServletResponse的一个抽象子类,设计用于包装原始的HttpServletResponse对象,以便我们可以对其进行扩展和定制。 为了在过滤器中修改HTTP响应,我们首先创建一个...

    HttpServletResponse

    HttpServletResponse。。案例一、完成文件下载 案例二、生成验证码(了解)。...所以文件下载需 要IO技术将服务器端的文件使用InputStream读取到,在使用 ServletOutputStream写到response缓冲区中。。

    java+ireport应用.pdf

    9. 使用ServletOutputStream和PrintWriter:在Servlet中,可以使用ServletOutputStream来发送二进制数据(例如导出为Excel文件),而PrintWriter用于发送文本数据(例如导出为HTML文件)。 10. 异常处理:在报表...

    北大青鸟javaweb

    - **ServletAPI**:包含`ServletConfig`、`ServletContext`、`ServletRequest`和`ServletResponse`等接口,以及`ServletInputStream`和`ServletOutputStream`类,用于处理请求和响应。 - **HTTPServlet**:继承自`...

    JavaWeb容器的基本性能.pdf

    在Servlet中,使用`ServletOutputStream`的`write()`方法直接写入网络,而不是通过`PrintWriter`的`print()`,可以避免不必要的字符编码。 6. **理解服务器实现**:不同的Java EE应用服务器在实现输出接口和缓存...

    用servlet将jsp文件内容转为html

    在Web开发中,经常需要处理不同格式的文件转换任务。... #### 一、理解Servlet与JSP的基本概念 1. **Servlet**: ...开发者可以根据实际需求调整输出文件的路径和名称,以及对内容进行进一步的处理和定制。

    HttpServletRequest和HttpServletResponse的讲解

    `HttpServletRequest`和`HttpServletResponse`是两个核心的Servlet接口,它们是服务器与客户端之间交互的关键组件。下面我们将深入探讨这两个接口的功能、用法及实际应用案例。 `HttpServletRequest`接口代表了来自...

    HttpResonse的不同

    例如,`getOutputStream()`返回一个`ServletOutputStream`,可以用来写入二进制数据;`getWriter()`返回一个`PrintWriter`,适合于输出文本内容。 此外,`HttpResponse`还有其他实用方法,如设置缓存控制、编码、...

    Web_3_Request和Response1

    响应数据可以通过ServletResponse的getOutputStream()获取ServletOutputStream来发送二进制数据,或通过getWriter()获取PrintWriter对象来发送字符数据。设置MIME正文的字符编码和内容类型是通过setCharacter...

    Response笔记1

    设置响应体通常涉及获取输出流,可以选择字符输出流`PrintWriter getWriter()`或字节输出流`ServletOutputStream getOutputStream()`,然后通过这些流将数据写入。 在实际应用中,`Response`对象还常用于实现重定向...

    java过滤器中修改一个http请求的返回内容.docx

    在`ResponseWrapper`中,使用`CharArrayWriter`和`ServletOutputStream`的子类(如`WapperedOutputStream`)来存储响应内容。这样做的目的是为了在过滤器中修改内容,因为原始的`ServletOutputStream`一旦开始写入...

Global site tag (gtag.js) - Google Analytics