为什么ServletResponse
getWriter()
和getOutputStream()
的实例都无法调用?
答案 0 :(得分:18)
设计决定。 Writer和OutputStream都维护自己的缓冲区。如果你创建了一个,那么他们的输出需要以某种方式合并。可能,但更复杂。所以他们决定你必须选择是否需要基于字符的输出或二进制输出。
答案 1 :(得分:12)
因为Writer
是比OutputStream
更高级别的抽象。它控制底层流的字符编码,并结合自己的缓冲机制。
如果您在之前使用Writer之后直接写入OutputStream,则由于混合字符编码或缺少缓冲数据,基础流的损坏风险很高。
为防止这种混淆,servlet API禁止将两者用于任何一个响应。
更实际的是,您使用OutputStream编写二进制内容,使用Writer编写文本内容。
答案 2 :(得分:5)
通常这是因为getOutputStream()
用于编写二进制内容,而getWriter()
用于编写文本内容。在一个servlet请求中写两个都没有意义 - 你应该使用一个或另一个。