刚刚看到《java Servlet programming》中讲到PrintWriter部分时,作者说道:
"Servlet uses the getWriter() method to retrieve a PrintWriter, the international-friendly counterpart to a
PrintStream. PrintWriter converts Java's Unicode characters to a locale-specific encoding. For an
English locale, it behaves same as a PrintStream.
"
上网搜了搜,找到下面的内容,原来没怎么在意这两者的区别,现在补补:
1. PrintWriter是以字符为单位,对所有的信息进行处理,而ServletOutputStream仅对二进制的资料进行处理。
2.
PrintWriter在输出字符文本时内部需要将字符串转换成某种字符集编码的字节数组,使用他的好处就是不需要自己来完成从字符串到字节数组的转换。 转换的字符集编码是通过设置setContentTpye或setCharacterEncoding或setLocale等方法实现的;使用ServletOutputStream对象直接从一个字节输入流中读取出来,然后再原封不动的输出到客服端。
3. 这两个方法相互排斥,只能调用其一,如果要用,则要在换方法之前调用flush(),将缓冲区数据冲掉。
4. PrintWriter自动清空缓冲区的功能被使能时(构造函数中autoFlush置为true),仅当println()方法被调用时才自动清缓冲区,而不是像PrintStream一样遇到一个换行符就清缓冲。
两种方法的取舍:
使用PrintWriter会占用一些系统开销,因为它是为处理字符流的输出输出功能。因此PrintWriter应该使用在确保有字符集转换的环境中。换句话说,在你知道servlet返回的仅仅是二进制数据时候,应该使用ServletOutputStream,这样你可以消除字符转换开销,当servlet容器不用处理字符集转换的时候。
附:写文件最佳组合
PrintWriter out = new PrintWriter(
new BufferedWriter(
new FileWriter(filename)))
PrintWriter 提供print系方法
BufferedWriter 提供缓冲,用以加速
FileWriter 用于写文件
转自:http://wuhenjia.blog.163.com/blog/static/9346944920109205357403/
分享到:
相关推荐
java 输出流中的PrintStream 和 PrintWriter有什么区别
Java Scanner File PrintWriter使用实例
主要介绍了PrintStream和PrintWriter的区别简介,具有一定借鉴价值,需要的朋友可以参考下
主要介绍了浅谈PrintStream和PrintWriter的区别和联系,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
java写入txt:两种方法,1:利用PrintWriter 类2.FileOutputStream输出流
PrintWriter的用法---马克-to-win java视频 打印输出流
【公益知识库zscc.club】51-IO流(PrintWriter).avi
PrintWriter 是字符类型的打印输出流,它继承于Writer。接下来通过本文给大家介绍java中的 PrintWriter 相关知识,感兴趣的朋友一起学习吧
File-Output-w-PrintWriter 一个演示 PrintWriter 类的简单程序。 系统会提示用户输入文件名以及他们有多少朋友。 将使用 PrintWriter 类创建一个文件。 然后,FOR 循环将根据用户的好友数量重复次数。 每次循环时...
PrintWriter printWriter = new PrintWriter(clientOutput, true); printWriter.println("OVER"); } else { // 输入正方形边长,并输入其边长及面积 double side = Double.parseDouble(strLine); ...
HttpServletResponse。。案例一、完成文件下载 案例二、生成验证码(了解)。...所以文件下载需 要IO技术将服务器端的文件使用InputStream读取到,在使用 ServletOutputStream写到response缓冲区中。。
本篇文章主要介绍了Java servlet 使用 PrintWriter 时的编码与乱码的示例代码,探讨了 PrintWriter 的缺省编码与普通字符流的缺省编码的差异,具有一定的参考价值,有兴趣的可以了解一下
高级javaimport java.io.BufferedReader; import java.io.... PrintWriter os =new PrintWriter(socket.getOutputStream()); String readline; readline =sin.readLine(); while(!readline.equals("bye")){
clientOutputStreams = new ArrayList<PrintWriter>(); try{ ServerSocket serverSock = new ServerSocket(888); while(true){ Socket clientSocket = serverSock.accept(); PrintWriter writer = new ...
我们在javaWeb项目时,使用doget和dopost总是会出现各种原因的中文乱码问题,楼主在查阅大量资料后,将为什么有这样的问题,和如何解决这种问题做个总结。 思维导图: 1. 应答乱码处理(response输出页面时乱码) 1.1 ...
使用PrintWriter写入文本文件
import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.InetAddress;...PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
如果写文本文件,推荐使用PrintWriter,当创建好PrintWriter对象后,调用其println和print方法可以将字符串一行行的写入到文本文件,使用方法与System.out.println, System.out.print完全一样 具体使用方法,请见...
Java JSP Servlet数据库连接代码,把数据库连接封装在Servlet中,可多次重复调用,另外更换数据库时候也很方便修改。... PrintWriter out = new PrintWriter(res.getOutputStream()); //获取输出流
设服务器端程序监听端口为8629, 当收到客户端信息后,首先判断是否是"BYE",若是,则立即向对方发送"BYE",... PrintWriter out = new PrintWriter(socket.getOutputStream(),true); BufferedReader br = new Buffer