PrintWriter和ServletOutputStream的区别

简介: 1. PrintWriter是以字符为单位,对所有的信息进行处理,而ServletOutputStream仅对二进制的资料进行处理。 2. PrintWriter在输出字符文本时内部需要将字符串转换成某种字符集编码的字节数组,使用他的好处就是不需要自己来完成从字符串到字节数组的转换。转换的字符集编码是通过设置setContentTpye或setCharacterEncoding或se

1. PrintWriter是以字符为单位,对所有的信息进行处理,而ServletOutputStream仅对二进制的资料进行处理。
2. PrintWriter
在输出字符文本时内部需要将字符串转换成某种字符集编码的字节数组,使用他的好处就是不需要自己来完成从字符串到字节数组的转换。转换的字符集编码是通过设置setContentTpyesetCharacterEncodingsetLocale等方法实现的;使用ServletOutputStream对象直接从一个字节输入流中读取出来,然后再原封不动的输出到客服端。
3.
这两个方法相互排斥,只能调用其一,如果要用,则要在换方法之前调用flush(),将缓冲区数据冲掉。
4. PrintWriter
自动清空缓冲区的功能被使能时(构造函数中autoFlush置为true),仅当println()方法被调用时才自动清缓冲区,而不是像PrintStream一样遇到一个换行符就清缓冲。

两种方法的取舍:
使用PrintWriter会占用一些系统开销,因为它是为处理字符流的输出功能。因此PrintWriter应该使用在确保有字符集转换的环境中。换句话说,在你知道servlet返回的仅仅是二进制数据时候,应该使用ServletOutputStream,这样你可以消除字符转换开销,当servlet容器不用处理字符集转换的时候。
前台页面请求图片处理显示。

<td valign="top" rowspan="5" width="16%"> <img src="${ctx }/departmentAction.do?dispatch=getDeptPic&id=${deptForm.department.deptId }" height="143" width="103"> </td>
后台图片显示处理
ServletOutputStream sout = response.getOutputStream(); sout.write(dept.getDeptIcon());//
将缓冲区的输入输出到页面 sout.flush(); // 输入完毕,清除缓冲 sout.close();//关闭流


附:写文件最佳组合
PrintWriter out = new PrintWriter( new BufferedWriter( new FileWriter(filename))) PrintWriter
提供print系方法
BufferedWriter
提供缓冲,用以加速
FileWriter
用于写文件

目录
相关文章
|
8月前
|
Java
Java IO流--转换流InputStreamReader和OutputStreamWriter的使用
Java IO流--转换流InputStreamReader和OutputStreamWriter的使用
123 0
|
8月前
|
Java
Java IO流--打印流PrintStream和PrintWriter的使用详解
Java IO流--打印流PrintStream和PrintWriter的使用详解
93 0
|
8月前
|
缓存 Java
深入解析 Java 中的 OutputStream:输出流的精髓揭秘
在 Java 编程中,输出流(OutputStream)是一个关键概念,它为我们提供了一种向目标写入数据的方法。无论是写入文件、网络数据还是其他输出目标,OutputStream 都是实现数据输出的不可或缺的工具。本文将带您深入探索 Java 中的 OutputStream,揭示其原理、用法以及在实际开发中的应用。
|
9月前
|
存储 编解码 缓存
InputStream、OutputStream、Reader、Writer的基本概念和使用方法
InputStream、OutputStream、Reader、Writer的基本概念和使用方法
94 0
|
10月前
|
存储 缓存 Java
【Java I/O 流】字符输入输出流:Reader 和 Writer
前面我们已经学会了字节流的使用,本篇开始介绍字符流。字符输入输出流是所有字符流的超类,学会了它们的方法,也基本上掌握了其子类的使用了。
78 0
|
Java 容器
Java 是否应该在HttpServletResponse.getOutputStream()/getWriter()上调用.close()?
Java 是否应该在HttpServletResponse.getOutputStream()/getWriter()上调用.close()?
|
缓存 Java
Java学习路线-26:字节流与字符流OutputStream/InputStream/Writer/Reader
Java学习路线-26:字节流与字符流OutputStream/InputStream/Writer/Reader
110 0
|
存储 Java
【J2SE快速进阶】——IO流的四个基本抽象类InputStream、OutputStream、Reader、Writer
上文中对java.io包中的四个抽象类及其关系简单了解了一下,这里进一步对它们及其子类进一步总结一下。 在上篇博客末尾,贴出了Java中的整个IO家族,之后小编又重修改了一下,在之前的基础上,标识出了节点流与处理流(绿色为节点流,黄色为处理流)。
【J2SE快速进阶】——IO流的四个基本抽象类InputStream、OutputStream、Reader、Writer
|
Java API
打印输出流PrintStream和PrintWriter(五)下
打印输出流PrintStream和PrintWriter(五)
157 0
打印输出流PrintStream和PrintWriter(五)下