在java中向HttpServletResponse添加一些内容时,我可以获得响应编写器并附加:
httpResponse.getWriter().append("Some Content");
或者我可以在输出流中添加内容:
ServletOutputStream servletOut = httpResponse.getOutputStream();
servletOut.write(someByteArray);
两者之间的唯一区别是第一个获取字符串/字符串序列而第二个获取字节(当然内容类型也会受到影响)?我应该更喜欢一个吗?我什么时候应该使用哪个?
答案 0 :(得分:1)
ServletOutputStream: ServletResponse.getOutputStream()返回一个适合在响应中写入二进制数据的ServletOutputStream。 servlet容器不对二进制数据进行编码,它按原样发送原始数据。
PrintWriter :ServletResponse.getWriter()返回PrintWriter对象,该对象将字符文本发送到客户端。 PrintWriter使用getCharacterEncoding()返回的字符编码。如果尚未指定响应的字符编码,则它会进行默认字符编码。
答案 1 :(得分:1)
实际上......只有在国际化的情况下,字节流才会与字符流相比显着。
Java平台使用Unicode约定存储字符值。字符流I / O自动将此内部格式转换为本地字符集。在Western语言环境中,本地字符集通常是ASCII的8位超集。
对于大多数应用程序,具有字符流的I / O并不比具有字节流的I / O复杂。使用流类完成的输入和输出会自动转换为本地字符集和从本地字符集转换。使用字符流代替字节流的程序会自动适应本地字符集,并且可以进行国际化 - 所有这一切都无需程序员的额外努力。
如果国际化不是优先事项,您可以简单地使用字符流类而不必过多关注字符集问题。之后,如果国际化成为优先事项,您的程序可以在没有大量重新编码的情况下进行调整。
希望这能回答你的问题...
答案 2 :(得分:1)
下表显示了它们之间的区别,您可以根据表中的要求使用其中任何一个。