PrintWriter和ServletOutputStream的区别

1. PrintWriter是以字符为单位,对所有的信息进行处理,而ServletOutputStream仅对二进制的资料进行处理。

2. PrintWriter在输出字符文本时内部需要将字符串转换成某种字符集编码的字节数组,使用他的好处就是不需要自己来完成从字符串到字节数组的转换。转换的字符集编码是通过设置setContentTpye或setCharacterEncoding或setLocale等方法实现的;使用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 用于写文件

时间: 2024-08-03 06:03:13

PrintWriter和ServletOutputStream的区别的相关文章

Servlets,JSP和Servlet Engines入门

js|servlet 什么是Servlets? Servlets是Java专注于CGI开发的一种技术.运行在Server端,并产生动态的结果.为什么要使用Servlets来代替传统的CGI程序呢? 效率:使用传统的CGI程序,每当收到一个HTTP请求的时候,系统就要启动一个新的进程来处理这个请求,这样会导致系统性能的降低.而使用Servlets,Java VMs一直在运行,当接到一个请求之后Java VMs就创建一个Java线程马上进行处理,如此要比每次都启动一个新的系统进程效率要高的多. 功能

http response乱码的真相

这个是很久以前的笔记,最近遇到一个编码问题,重新把它翻出来了. 这个只和java servlet有关,现在通常都用各种框架,很少会直接用到Servlet了. 查看servlet源代码的方法 查看servlet源代码的方法.因为servlet只是一些接口,并不是真正的实现,所以,如果想看真正的代码. 要去下对应的服务器的实现的源代码.比如Tomcat的代码在这里: http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.33/src/ Servlet

缓存filter及资源池模式

一.缓存过滤器模式1.概念:缓存过滤器模式是通过使用servlet的filter来动态地缓存生成的页面,从而提高web层的性能和伸缩性.工作原理非常简单,当第一次请求到来时,判断是否可以缓存,可以的话就放在缓存里.当下次请求时,直接从缓存中取出,而不是再次请求.2.一个简单实现对html页面的缓存: package cfexample.controller;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;/*

PrintWriter中write()方法和print()方法的区别?

问题描述 PrintWriter中write()方法和print()方法的区别? 解决方案 共同点:两者都不刷新页面,只在原来的页面写数据.最终都是重写了抽象类Writer里面的write方法.print方法可以将各种类型的数据转换成字符串的形式输出.重载的write方法只能输出字符.字符数组.字符串等与字符相关的数据.解决方案二:查看源码你会看到public void print(Object obj) { write(String.valueOf(obj));}print方法就是调用writ

Socket PrintWriter 中 write() 与 print() 的区别

try { PrintWriter pw = response.getWriter(); int x = 98; pw.write(x); pw.print(x); } catch (IOException e) { e.printStackTrace(); }   输出:b  98 最终都是重写了抽象类Writer里面的write方法 print方法可以将各种类型的数据转换成字符串的形式输出.重载的write方法只能输出字符.字符数组.字符串等与字符相关的数据. 查看一下源码(java.io.

JspWriter 与 printwriter区别

JSP九个隐含对象 JspWriter out JspWriter是抽象类而PrintWriter不是,也就是说你可以通过new操作来直接新建一个PrintWriter的对象而JspWriter不行,它必须是通过其子类来新建.  但是它们之间又是有关系的,这个关系主要是JspWriter对PrintWriter有依赖.初始化一个JspWriter对象的时候要关联ServletResponse对象的一个PrintWriter类型对象,最终JspWriter对象的输出任务还是通过这个PrintWri

fileoutputstream-关于java的IO中PrintWriter问题

问题描述 关于java的IO中PrintWriter问题 public class PrintIOTest { public static void main(String[] ages){ try{ FileOutputStream fos = new FileOutputStream(""test.txt""); PrintStream ps = new PrintStream(fos); ps.print(""helloworld!&quo

Servlet url-pattern /与/*区别

以前在使用Servlet的时候,配置url-pattern基本上都是指定的路径,也没有仔细的研究,最近突然发现了一个问题,我们将url-pattern配制成/*,那么Servlet会处理与其匹配的路径,那么我们配制成/是不是效果一样呢?下面我们将通过实际示例来验证一下. 首先我们新建一个Web程序,创建过程这里就不再叙述了.然后我们再创建一个Servlet用于测试 package com.gujin.servlet; import java.io.IOException; import java

mfc-LBN_SELCHANGE和LBN_DBLCLK有什么区别?

问题描述 LBN_SELCHANGE和LBN_DBLCLK有什么区别? LBN_SELCHANGE和LBN_DBLCLK有什么区别呢,我是新手,请说的详细些. 解决方案 一个在选择更改的时候触发,一个在双击的时候触发 解决方案二: msdn文档中都有,详细地自己看,或者google下