PrintWriter 与 ServletOutputStream的区别
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 用于写文件
分享到:
相关推荐
解决方法是使用 ServletOutputStream 输出中文字符,而不是使用 PrintWriter。ServletOutputStream 不受字符编码的限制,可以在输出中文字符时指定字符编码。 下面是一个使用 ServletOutputStream 输出中文字符的...
(3)如果一个网页文档内容全部为字符文本,但是这些内容可以直接从一个字节流中读取出来,然后再原封不动的输出到客户端,那么就应该使用 ServletOutputStream 对象直接进行输出,而不要使用 PrintWriter 对象进行...
- 自定义`ServletOutputStream`和`PrintWriter`对象,以便将输出内容重定向到内存中。 - 将内存中的内容写入到硬盘上,生成静态HTML文件。 #### 应用场景 这种方法适用于需要定期更新大量静态页面的场景,如新闻...
在这个例子中,创建了自定义的 `ServletOutputStream` 和 `PrintWriter` 实例,用于捕获JSP页面渲染后的输出。 5. **文件输出流 FileOutputStream**: - 使用 `FileOutputStream` 将Servlet输出流的内容写入到指定...
HttpServletResponse。。案例一、完成文件下载 案例二、生成验证码(了解)。...所以文件下载需 要IO技术将服务器端的文件使用InputStream读取到,在使用 ServletOutputStream写到response缓冲区中。。
在`ResponseWrapper`中,我们还需要实现`WapperedOutputStream`类,这是一个内部类,它包装了`CharArrayWriter`,使得所有通过ServletOutputStream写出的数据都能被记录。这样,当过滤器完成对响应的修改后,可以...
9. 使用ServletOutputStream和PrintWriter:在Servlet中,可以使用ServletOutputStream来发送二进制数据(例如导出为Excel文件),而PrintWriter用于发送文本数据(例如导出为HTML文件)。 10. 异常处理:在报表...
final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os)) {...}; // 创建HttpServletResponse包装类,使得可以捕获响应内容 HttpServletResponse rep = new HttpServletResponseWrapper(response) ...
#### 一、理解Servlet与JSP的基本概念 1. **Servlet**: - Servlet是一种Java服务器端应用程序接口(API),它定义了如何响应HTTP请求的标准。 - Servlet可以被看作是服务器端的Java程序,它可以接收来自客户端的...
#### 一、背景与目的 在Web开发过程中,经常需要在请求处理流程中增加一些通用的功能,比如日志记录、性能监控、安全控制等。Java Servlet规范提供了Filter机制来实现这些需求。本文将详细介绍如何利用Java Filter...
- 如果要发送二进制数据,可以调用`getOutputStream()`方法获取`ServletOutputStream`对象,并使用它来写入响应。 #### 四、示例代码分析 下面是一个简单的Servlet示例代码,该示例展示了如何使用`...
另一种方法是使用getOutputStream方法获取ServletOutputStream对象,用于返回二进制数据。在使用Writer或OutputStream之前,需要先设置头部,然后使用Writer或OutputStream将相应的主体部分发送给用户。完成后,需要...
- **getWriter()**:重写此方法以返回一个`PrintWriter`,它写入到`CharArrayWriter`实例,这同样保存了待发送的数据。 - **flushBuffer()** 和 **reset()**:这两个方法需要重写以确保在调用时,数据能正确地被...
例如,`getOutputStream()`返回一个`ServletOutputStream`,可以用来写入二进制数据;`getWriter()`返回一个`PrintWriter`,适合于输出文本内容。 此外,`HttpResponse`还有其他实用方法,如设置缓存控制、编码、...
`HttpServletRequest`和`HttpServletResponse`是两个核心的Servlet接口,它们是服务器与客户端之间交互的关键组件。下面我们将深入探讨这两个接口的功能、用法及实际应用案例。 `HttpServletRequest`接口代表了来自...
3. `getOutputStream()`:返回ServletOutputStream,用于写入二进制数据到响应体,如文件下载。 4. `getWriter()`:返回PrintWriter,用于写入文本数据到响应体,如HTML、JSON等。 在实际应用中,我们通常会创建一...
要写入文本数据,可以使用`response.getWriter()`获取`PrintWriter`对象,或者使用`response.getOutputStream()`获取`ServletOutputStream`对象,然后写入文本。 7. Q: 71 - Java SE Applet与Web页面的交互 这个...