java中的Servlet - getWriter()和getOutputStream()

时间:2011-01-20 10:44:19

标签: java servlets

为什么ServletResponse getWriter()getOutputStream()的实例都无法调用?

3 个答案:

答案 0 :(得分:18)

设计决定。 Writer和OutputStream都维护自己的缓冲区。如果你创建了一个,那么他们的输出需要以某种方式合并。可能,但更复杂。所以他们决定你必须选择是否需要基于字符的输出或二进制输出。

答案 1 :(得分:12)

因为Writer是比OutputStream更高级别的抽象。它控制底层流的字符编码,并结合自己的缓冲机制。

如果您在之前使用Writer之后直接写入OutputStream,则由于混合字符编码或缺少缓冲数据,基础流的损坏风险很高。

为防止这种混淆,servlet API禁止将两者用于任何一个响应。

更实际的是,您使用OutputStream编写二进制内容,使用Writer编写文本内容。

答案 2 :(得分:5)

通常这是因为getOutputStream()用于编写二进制内容,而getWriter()用于编写文本内容。在一个servlet请求中写两个都没有意义 - 你应该使用一个或另一个。