2011-01-20 82 views
9

为什么在ServletResponse的实例上都不能调用getWriter()getOutputStream()Java中的Servlets - getWriter()和getOutputStream()

+0

如果你想解释为什么你想在一个servlet请求中调用它们,这可能会有所帮助。 – 2011-01-20 10:49:33

+0

这可能不是Abkutty想要调用两者,而是Servlet,错误处理Servlet,以及一些Filter试图写输出,而不是正确地协调使用哪种方法。 – Thilo 2011-01-20 10:52:20

回答

18

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

4

通常这是因为getOutputStream()用于写入二进制内容,而getWriter()用于写入文本内容。将两者写入一个servlet请求是没有意义的 - 您应该使用一个或另一个。

12

由于WriterOutputStream更高级别的抽象。它控制底层流的字符编码,并且包含它自己的缓冲机制。

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

为了防止这种混淆,servlet API禁止在任何一个响应中使用两者。

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