InputStream(字节输入流)  OutputStream(字节输出流)  Reader(字符输入流)  Writer(字符输出流)都是抽象类,所以不可以直接new;它们是各大输入输出流的父类。

输入流:是要从数据源(键盘,文件,磁盘等)传到(这里我们叫做read)计算机内存、程序的一种流(为什么传到内存?因为要进行数据处理啊!数据处理当然要将数据传到计算机内存进行处理),Java奉行一切皆为对象,所以这里的流是一种类,new这个类之后,就创建了一个流对象,就可以调用里面的各种方法了;这个类里面有很多方法,比如将这个流里面的数据用read方法读出来,读到byte或者char数组中(这里的byte和char数组也是类,new之后,它们就在内存中分配了一定的空间)方便进行数据处理。

输出流:从计算机程序中的数据转化为OutputStream(输出流),我们一般称之为输出流。

下面上图,易于记忆:

字节流:以字节输入流为例,字节输入流就是以一个字节为单位将数据源中的数据读入流中。

字符流:以字符输入流为例,字符流可以看作是包装流,其底层还是采用字节输入流来读取字节,然后它使用制定的编码方式将读取字节解码为字符。

注意点:

FileReader继承自InputStreamReader ;

它们的区别:

InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:

BufferedReader in

=newBufferedReader(new InputStreamReader(System.in));

FileReader是用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。

FileReader用于读取字符流。要读取原始字节流,请考虑使用 FileInputStream

总结:InputStreamReader 是用来读取原始字节流,可指定编码格式,而FileReader是读取字符流,使用系统默认的编码格式,当读取中文文件是易出现乱码问题。

推荐使用:

File file = new File (filename);

InputStreamReader input =newInputStreamReader(new FileInputStream(file),"UTF-8");

BufferedReader br = newBufferedReader(input);

InputStreamWriter与FileWriter异同点与之类似;

从字节流到字符流的转换:

System.in的类型可以归结为节点流、字节流、输入流;

InputStreamReader这个对象是处理流,字符流,输入流;

BufferedReader的类型是缓冲处理流、字符流、输入流。

类 InputStreamReader是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。如:GBK

每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。 为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:  BufferedReader in= new BufferedReader(new InputStreamReader(System.in));

System.in是个字节流

InputStreamReader是个字符流和字节流之间的转换中介

BufferedReader是个字符流

整体意思就是用InputStreamReader这个中介把System.in这个字节流转换成字符流BufferedReader

这样输入的时候就可以不是一个一个字节读,而是一个一个字符读,再加上是个Buffer,效率会高很多。

InputStream is = System.in;//键盘输入流

InputStreamReader isr = new InputStreamReader(is);//字节流转换为字符流

BufferedReader bufr = new BufferedReader(isr);//把字符流添加到缓冲流

用户通过reader对象的readLine方法来进行读取。

java输入输出流总结_Java输入输出流总结相关推荐

  1. java输入输出及文件_java输入输出流及文件操作

    我只选择了一些代码 注意包声明和相关结构 许多类都继承了MyFile这个类 深入研究可以参考<java文件操作> 1.[代码]读取文件内容 /** *Author:Yuanhonglong ...

  2. java中nio流_Java输入输出流IO介绍(与NIO比较)

    一.Java中流的类型 根据流的方向划分:输入流,输出流 根据流的传输单位:字节流,字符流 根据流的角色划分:节点流,处理流 节点流:直接连接数据源的流 处理流:通过构造方法接收一个节点流,对节点流使 ...

  3. java输入一个数字输出_java 输入一个数字,反转输出这个数字的值(实现方法)

    如下所示: package 第四天; import java.util.Scanner; public class 数字反转 { public static void main(String[] ar ...

  4. java 多个数字_java 输入多个数字

    Java中的Scanner类如何用循环实现输入多个数字啊???我是个初学者各位大哥大姐前辈们帮帮忙啊importjava.util.*;publicclassjiafa{publicstaticvoi ...

  5. java实现空心四边形_Java输入数值形成对应的平行四边形,正三角形,棱形,空心棱形...

    这其中要使用Scanner 引用数据类型的使用: 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 = new 数据类型(); //Scanner ...

  6. java字节输入与字符输入_Java中的字节输入出流和字符输入输出流

    Java中的字节输入出流和字符输入输出流 下面哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D In ...

  7. java怎么创建输入输出流_Java输入输出流

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  8. java读取输出流_Java输入输出流

    1什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作.Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读写数 ...

  9. java中的输入输出流概念_java输入输出--I/O流的概念和划分

    理解数据流 数据流(Stream)是一组有顺序的,有起点的,有终点的字节集合,是对输入和输出的总称和抽象. 一般地,数据流分为 输入流(InputStream)和输出流(OutputStream).输 ...

最新文章

  1. Acunetix WVS安全测试软件使用教程(入门级)
  2. JAVA图形界面(GUI)之布局管理器
  3. MYSQL使用的时候遇到的一些问题
  4. 在win10企业版x64下使用curl命令
  5. Javaassist简介
  6. 计算机系统基础:输入输出技术知识笔记
  7. UVALive 6525 Attacking rooks 二分匹配 经典题
  8. nginx 非socket代理配置
  9. gt爵士变形步骤_编码广播:编码时您可以听24/7爵士节奏
  10. Jquery插件ajaxFileUpload文件上传与Bootstrap之fileinput插件上传文件的使用与MultipartFile使用与导入Excel和导出Excel
  11. SSD-tensorflow-2 制作自己的数据集
  12. web前端之Vue——子组件的详解
  13. 【TCP/IP】IP:网际协议(寻址和路由)
  14. CC26xx([CortexM3)的Power Reset and Clock
  15. shell 知:ola
  16. 画论51 沈灏《画尘》
  17. 如何通过Shell脚本,批量配置路由器或交换机配置
  18. unity报错,提示找不到vcruntime140
  19. CFX 多工况计算的批处理方法
  20. C++ 编程中常用的英文单词(首字母是G、H、I开头)

热门文章

  1. 2009年的个人所得税和社保计算
  2. Cuckoo Hash 布谷鸟哈希
  3. scp 服务器文件到本地,scp将远程服务器上文件拷贝到本地
  4. fis3项目个人理解
  5. Uboot sf 命令:erase write read 用法
  6. 联想AI研究院面试题总结(3道算法题)
  7. 超强辅助类插件,神器一样的存在
  8. 3.3 Python图像的频域图像增强-特殊高通滤波器
  9. Lottie系列二:高级属性
  10. C语言实现STL静态链表,先进后出的数据结构-栈 一