网上有很多地方说inputStreamReader和outStreamWriter、BufferedReader和BufferedWriter都是字符流。不过也有地方说inputStreamReader和outStreamWriter只是转换流,实现字节流到字符流的转换。

而在我看来,两种说法都有道理,如果一定要分个高下的话,那就更加趋向于认同前一种。

因为只要和FileInputStream做一个简单的比较就可以知道inputSteamReader是按字符读取的,而FileInputStream是按字节。

测试部分代码如下:

1、

  1. File file = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest1.txt");
  2. // 创建一个fileInputStream对象
  3. FileInputStream fileInputStream = new FileInputStream(file);
  4. // 获取文件中字符的长度
  5. int leng = fileInputStream.available();
  6. for (int i = 0; i < leng; i++) {
  7. // 读取每个字节
  8. System.out.print(fileInputStream.read());
  9. System.out.println();
  10. }

2、

  1. File file = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest1.txt")
  2. // 创建字符输入流的同时指定字符集
  3. InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
  4. while (isr.ready()) {
  5. System.out.print(isr.read());
  6. System.out.println();
  7. }

在上边的例子中可以看到,对于同一个文件,FileInputStream的输出行数要比 InputStreamReader的输出行数多出两倍多(中英文混合),InputStreamReader的输出行数刚好就是文件中的字符个数。

不过,说inputStreamReader和outStreamWriter是转换流,也不是没有道理,因为通常使用的时候都是结合BufferedReader和BufferedWriter来一起使用的,inputStreamReader和outStreamWriter创建的时候可以声明字符集。

简单的示例如下:

  1. /**
  2. * inputStreamReader和outStreamWriter字符输入输出流
  3. *
  4. * @author:tuzongxun
  5. * @Title: inAndOutTest
  6. * @param @throws IOException
  7. * @return void
  8. * @date Jul 20, 2016 11:17:05 AM
  9. * @throws
  10. */
  11. public static void readAndWriterTest1() throws IOException {
  12. File file = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest1.txt");
  13. File file1 = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest2.txt");
  14. // 创建字符输入流的同时指定字符集
  15. InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
  16. OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file1), "utf-8");
  17. while (isr.ready()) {
  18. int in = isr.read();
  19. osw.write(in);
  20. }
  21. osw.flush();
  22. isr.close();
  23. osw.close();
  24. }
  25. /**
  26. * BufferedReader和BufferedWriter 字符缓冲输入和输出流
  27. *
  28. * @author:tuzongxun
  29. * @Title: readAndWriterTest2
  30. * @param @throws IOException
  31. * @return void
  32. * @date Jul 21, 2016 10:36:28 AM
  33. * @throws
  34. */
  35. public static void readAndWriterTest2() throws IOException {
  36. File file = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest1.txt");
  37. File file1 = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest2.txt");
  38. BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8")));
  39. BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file1), "utf-8")));
  40. String str;
  41. while ((str = br.readLine()) != null) {
  42. System.out.println(str);
  43. bw.write(str);
  44. }
  45. bw.flush();
  46. br.close();
  47. bw.close();
  48. }

java字符流的更多相关文章

  1. Java 字符流实现文件读写操作(FileReader-FileWriter)

    Java 字符流实现文件读写操作(FileReader-FileWriter) 备注:字符流效率高,但是没有字节流底层 字节流地址:http://pengyan5945.iteye.com/blog/ ...

  2. java字符流操作flush()方法及其注意事项

    java字符流操作flush()方法及其注意事项   flush()方法介绍 查阅文档可以发现,IO流中每一个类都实现了Closeable接口,它们进行资源操作之后都需要执行close()方法将流关闭 ...

  3. [Java] 字符流 Writer,输出字符数据PrintWriter

    package test.stream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...

  4. [Java] 字符流Reader,读取字符数据

    package test.stream; import java.io.BufferedReader; import java.io.FileNotFoundException; import jav ...

  5. Java字符流和字节流对文件操作

    记得当初自己刚开始学习Java的时候,对Java的IO流这一块特别不明白,所以写了这篇随笔希望能对刚开始学习Java的人有所帮助,也方便以后自己查询.Java的IO流分为字符流(Reader,Writ ...

  6. Java 字符流操作

    上篇文章Java 字节流操作介绍了java中基本的字节流操作,但是我们常常对于字符操作,如果使用字节流来实现输入输出就显得麻烦,我们可以使用字符流来实现对我们看得见的字符char进行操作,主要内容如下 ...

  7. Java 字符流文件读写

    上篇文章,我们介绍了 Java 的文件字节流框架中的相关内容,而我们本篇文章将着重于文件字符流的相关内容. 首先需要明确一点的是,字节流处理文件的时候是基于字节的,而字符流处理文件则是基于一个个字符为 ...

  8. Java 字符流与基本IO

    字符流基类 java.io包中专门用于字符流处理的类,是以 Reader 和 Writer 为基础派生的一系列类.字符流以字符为单位,根据码表映射字符,一次可能读多个字节,只能处理字符类型的数据.Re ...

  9. java字符流实现文件间的内容复制

    package com.io.demo1; import java.io.FileReader; import java.io.FileWriter; public class TestFileSTr ...

  10. java 字符流 字节流

    java对文本文档进行操作(拷贝.显示)出现乱码一般来说,可以从两个方面入手. 1.文本文件本身的编码格式. 2.java代码中处理文本文件的编码格式. 这里要注意的一点是,我们可以看出copyFil ...

随机推荐

  1. Git Batch命令(转)

    echo 和 @ 回显命令 @ #关闭单行回显 echo off #从下一行开始关闭回显 @echo off #从本行开始关闭回显.一般批处理第一行都是这个 echo on #从下一行开始打开回显 e ...

  2. tomcat中session在两个webapp中实现共享

    现在遇到一个需求就是要求完成简单的单点登录,通过在一个tomcat实例中放置两个webapps应用ROOT应用和CEO应用来完成在ROOT应用登录后,在CEO可以直接使用,而未在ROOT应用登录时,不 ...

  3. Java - 二叉树递归与非递归

    树的定义具有递归特性,因此用递归来遍历比较符合特性,但是用非递归方式就比较麻烦,主要是递归和栈的转换. import java.util.Stack; /** * @author 李文浩 * @ver ...

  4. Web安全之CSP

    内容安全策略(Content-Security-Policy,简称CSP) 概念: 内容安全策略(CSP)是一种web应用技术用于帮助缓解大部分类型的内容注入攻击,包括XSS攻击和数据注入等,这些攻击 ...

  5. squid安装及运行指南

    squid安装及运行指南 0. What is squid Squid是一个高性能的代理缓存服务器,Squid支持FTP.gopher.HTTPS和HTTP协议.和一般的代理缓存软件不同,Squid用 ...

  6. 给file_get_contents函数设置超时时间

    $opts = array( 'http'=>array( 'method'=>"GET", 'timeout'=>60, ) ); $context = str ...

  7. 基于Vue2写的一个有关美食项目

    刚学Vue练习的一个项目 使用Vue2+vue-router+vuex+axios+webpack router使用了默认的hash模式 引入了高德地图和element-ui 项目地址点击这里 演示地 ...

  8. 看图说话,P2P 分享率 90% 以上的 P2P-CDN 服务,来了!

    事情是这样的:今年年初的时候,公司准备筹划一个直播项目,在原有的 APP 中嵌入直播模块,其中的一个问题就是直播加速服务的选取. 老板让我负责直播加速的产品选型,那天老板把我叫到办公室,语重心长地说: ...

  9. HDU 4372 Count the Buildings [第一类斯特林数]

    有n(<=2000)栋楼排成一排,高度恰好是1至n且两两不同.现在从左侧看能看到f栋,从右边看能看到b栋,问有多少种可能方案. T组数据, (T<=100000) 自己只想出了用DP搞 发 ...

  10. LearnPython_week1

    1.      Python安装 2.      Hello World程序 3.      变量的简单使用 4.      注释#'" 5.      用户输入 6.      字符串格式 ...