刚刚看到《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 用于写文件
详细解决方案
PrintWriter跟ServletOutputStream的区别
热度:112 发布时间:2012-10-16 09:57:37.0
刚刚看到《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 用于写文件
相关解决方案
- 初学者发问:The constructor Printwriter(String) is undefined
- PrintWriter
- 有了printstream/printwriter,这就是说outputstream/writer还有什么用呢?新手不太理解
- Java BufferedReader、FileReader、FileWriter、PrintWriter
- 【Java.IO】I/O 【字节/字符】【处理流】 - 【格式化输出打印流】 - PrintStream, PrintWriter
- Java IO (17) -- PrintWriter 类
- PrintWriter out = response.getWriter()使用
- OutputStreamWriter Writer PrintWriter
- servlet PrintWriter out = response.getWriter() out.write() 中文乱码