【问题标题】:HttpServletResponse - writing to response writer vs outputstreamHttpServletResponse - 写入响应编写器与输出流
【发布时间】:2015-06-08 10:16:05
【问题描述】:

在 java 中向 HttpServletResponse 添加一些内容时,我可以获取响应编写器并追加:

httpResponse.getWriter().append("Some Content");

或者我可以向输出流添加内容:

ServletOutputStream servletOut = httpResponse.getOutputStream();
servletOut.write(someByteArray);

两者之间的唯一区别是第一个获取字符串/字符序列,第二个获取字节(当然内容类型也受到影响)?我应该更喜欢一个吗?我什么时候应该使用哪个?

【问题讨论】:

标签: java servlets


【解决方案1】:

实际上.. 仅在国际化的情况下,字节流与字符流相比才会显着。

Java 平台使用 Unicode 约定存储字符值。字符流 I/O 自动将此内部格式与本地字符集进行转换。在西方语言环境中,本地字符集通常是 ASCII 的 8 位超集。

对于大多数应用程序,字符流 I/O 并不比字节流 I/O 复杂。使用流类完成的输入和输出会自动转换为本地字符集或从本地字符集转换。使用字符流代替字节流的程序会自动适应本地字符集并为国际化做好准备——这一切都无需程序员付出额外的努力。

如果国际化不是优先事项,您可以简单地使用字符流类,而无需过多关注字符集问题。以后,如果国际化成为优先事项,您的程序无需大量重新编码即可适应。

希望这能回答您的问题...

【讨论】:

    【解决方案2】:

    ServletOutputStream: ServletResponse.getOutputStream() 返回一个适合在响应中写入二进制数据的 ServletOutputStream。 servlet 容器不对二进制数据进行编码,而是按原样发送原始数据。

    PrintWriter:ServletResponse.getWriter() 返回 PrintWriter 对象,该对象将字符文本发送到客户端。 PrintWriter 使用 getCharacterEncoding() 返回的字符编码。如果未指定响应的字符编码,则使用默认字符编码。

    【讨论】:

      【解决方案3】:

      下表显示了它们之间的区别,您可以根据适合表格的要求使用其中的任何一个。

      【讨论】:

        猜你喜欢
        • 2018-07-08
        • 1970-01-01
        • 2013-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-11
        • 2011-08-15
        相关资源
        最近更新 更多