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

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

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

测试部分代码如下:

1、

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

2、

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

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

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

简单的示例如下:

/**
     * inputStreamReader和outStreamWriter字符输入输出流
     *
     * @author:tuzongxun
     * @Title: inAndOutTest
     * @param @throws IOException
     * @return void
     * @date Jul 20, 2016 11:17:05 AM
     * @throws
     */
    public static void readAndWriterTest1() throws IOException {
        File file = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest1.txt");
        File file1 = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest2.txt");
        // 创建字符输入流的同时指定字符集
        InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file1), "utf-8");
        while (isr.ready()) {
            int in = isr.read();
            osw.write(in);
        }
        osw.flush();
        isr.close();
        osw.close();

    }

    /**
     * BufferedReader和BufferedWriter 字符缓冲输入和输出流
     *
     * @author:tuzongxun
     * @Title: readAndWriterTest2
     * @param @throws IOException
     * @return void
     * @date Jul 21, 2016 10:36:28 AM
     * @throws
     */
    public static void readAndWriterTest2() throws IOException {
        File file = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest1.txt");
        File file1 = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest2.txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8")));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file1), "utf-8")));
        String str;
        while ((str = br.readLine()) != null) {
            System.out.println(str);
            bw.write(str);
        }
        bw.flush();
        br.close();
        bw.close();
    }

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. Jmeter之http性能测试实战 NON-GUI模式 进行分布式压力测试——干货(十二)

    Apache JMeter Distributed Testing Step-by-step This short tutorial explains how to use multiple syst ...

  2. Spring MVC的优势

    Spring 框架提供了构建Web应用程序的全功能MVC模块--Spring MVC. Spring MVC框架提供了一个DispatcherServlet作为前端控制器来分派请求,同时提供灵活的配置 ...

  3. 关于Kafka 的 consumer 消费者处理的一些见解

    前言 在上一篇 Kafka使用Java实现数据的生产和消费demo 中介绍如何简单的使用kafka进行数据传输.本篇则重点介绍kafka中的 consumer 消费者的讲解. 应用场景 在上一篇kaf ...

  4. linux上的用户管理

    作为一个专业的服务器发行版,CentOS上存在着n多个用户,作为一个专业的运维工程师,linux的用户管理和用户组的管理是做为一个SA必不可少的工作. 下面我们就先来谈谈linux中的用户管理: us ...

  5. 使用JavaScript实现机器学习和神经学网络

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载heaton-javascript-ml.zip - 45.1 KB 基本介绍 在本文中,你会对如何使用JavaScript实现机器学习这个 ...

  6. 5.C++里的4种新型类型转换

    1首先来回顾C的强制转换 大家都知道,在编译C语言中的强制转换时,编译器不会检查转换是否成功,都会编译正确. 比如: #include "stdio.h" struct Posit ...

  7. Base64算法原理

    3个Byte (3 X 8 = 24 bits) 以3个字节为单位,依次取6位数据,并在前面补上2个0.这样就增加了一个字节的数据.

  8. pyDash:一个基于 web 的 Linux 性能监测工具

    pyDash 是一个轻量且基于 web 的 Linux 性能监测工具,它是用 Python 和 Django 加上 Chart.js 来写的.经测试,在下面这些主流 Linux 发行版上可运行:Cen ...

  9. hadoopmaster主机上传文件出错: put: File /a.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 3 datanode(s) running and 3 node(s) are excluded in this operation.

    刚开始装好hadoop的时候,namenode机上传文件没有错误,今天打开时突然不能上传文件,报错 put: File /a.txt._COPYING_ could only be replicate ...

  10. [翻译]编写高性能 .NET 代码 第一章:工具介绍 -- Performance Counters(性能计数器)

    <<返回目录 Performance Counters(性能计数器) 性能计数器是监视应用程序和系统性能的最简单的方法之一.它有几十个类别数百个计数器在,包括一些.net特有的计数器.要访 ...