java IO体系图

IO流的操作规律总结:

1,明确体系:
数据源:InputStream ,Reader
数据汇:OutputStream,Writer

2,明确数据:因为数据分两种:字节,字符。
数据源:是否是纯文本数据呢?
是:Reader 字符输入流
否:InputStream  字节输入流

数据汇:是否是纯文本数据呢?
是:Writer  字符输出流
否:OutputStream  字节输出流、

到这里就可以明确具体要使用哪一个体系了,剩下的就是要明确使用这个体系中的哪个对象。

3.明确设备:

数据源:
键盘:System.in  键盘输入
硬盘:FileXXX     硬盘上面
内存:数组。  
网络:socket socket.getInputStream();

数据汇:
控制台:System.out
硬盘:FileXXX
内存:数组
网络:socket socket.getOutputStream();

4,明确额外功能:
1,需要转换?是,使用转换流。InputStreamReader OutputStreamWriter

2,需要高效?是,使用缓冲区。Buffered
3,需要其他?

-------------------------------------------------------------------------------------------------------------------------------------

1,复制一个文本文件。

  1,明确体系:
    源:InputStream ,Reader
    目的:OutputStream ,Writer
  2,明确数据:
    源:是纯文本吗?是 Reader
    目的;是纯文本吗?是 Writer
  3,明确设备:
    源:硬盘上的一个文件。 FileReader
    目的:硬盘上的一个文件。FileWriter
    FileReader fr = new FileReader("a.txt");
    FileWriter fw = new FileWriter("b.txt");
  4,需要额外功能吗?
    需要,高效,使用buffer
    BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
    BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));

2,读取键盘录入,将数据存储到一个文件中。
  1,明确体系:
  源:InputStream ,Reader
  目的:OutputStream ,Writer
  2,明确数据:
  源:是纯文本吗?是 Reader
  目的;是纯文本吗?是 Writer
  3,明确设备:
  源:键盘,System.in
  目的:硬盘,FileWriter
  InputStream in = System.in;
  FileWriter fw = new FileWriter("a.txt");
      4,需要额外功能吗?
  需要,因为源明确的体系时Reader。可是源的设备是System.in。
  所以为了方便于操作文本数据,将源转成字符流。需要转换流。InputStreamReader
  InputStreamReader isr = new InputStreamReader(System.in);
  FileWriter fw = new FileWriter("a.txt");
  需要高效不?需要。Buffer
  BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  BufferedWriter bufw = new BufferedWriter(new FileWriter("a.txt"));

3,读取一个文本文件,将数据展现在控制台上。
  1,明确体系:
  源:InputStream ,Reader
  目的:OutputStream ,Writer
  2,明确数据:
  源:是纯文本吗?是 Reader
  目的;是纯文本吗?是 Writer
  3,明确设备:
  源:硬盘文件,FileReader。
  目的:控制台:System.out。
  FileReader fr = new FileReader("a.txt");
  OutputStream out = System.out;
  4,需要额外功能?
  因为源是文本数据,确定是Writer体系。所以为了方便操作字符数据,
  需要使用字符流,但是目的又是一个字节输出流。
  需要一个转换流,OutputStreamWriter:字符向字节转化
  FileReader fr = new FileReader("a.txt");
  OutputStreamWriter osw = new OutputStreamWriter(System.out);

  需要高效吗?需要。
  BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
  BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

4,读取键盘录入,将数据展现在控制台上。
  1,明确体系:
  源:InputStream ,Reader
  目的:OutputStream ,Writer
  2,明确数据:
  源:是纯文本吗?是 Reader
  目的;是纯文本吗?是 Writer
  3,明确设备:
  源:键盘:System.in
  目的:控制台:System.out
  InputStream in = System.in;
  OutputStream out = System.out;
  4,需要额外功能吗?
  因为处理的数据是文本数据,同时确定是字符流体系。
  为方便操作字符数据的可以将源和目的都转成字符流。使用转换流。
  为了提高效率,使用Buffer
  BufferedReader bufr =new BufferedReader(new InputStreamReader(Systme.in));
  BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

5,读取一个文本文件,将文件按照指定的编码表UTF-8进行存储,保存到另一个文件中。
  1,明确体系:
  源:InputStream ,Reader
  目的:OutputStream ,Writer
  2,明确数据:
  源:是纯文本吗?是 Reader
  目的;是纯文本吗?是 Writer
  3,明确设备:
  源:硬盘:FileReader.
  目的:硬盘:FileWriter
  FileReader fr = new FileReader("a.txt");
  FileWriter fw = new FileWriter("b.txt");
  4,额外功能:
  注意:目的中虽然是一个文件,但是需要指定编码表。
  而直接操作文本文件的FileWriter本身内置的是本地默认码表。无法明确具体指定码表。
  这时就需要转换功能。OutputStreamWriter,而这个转换流需要接受一个字节输出流,而且
  对应的目的是一个文件。这时就使用字节输出流中的操作文件的流对象。FileOutputStream.
  FileReader fr = new FileReader("a.txt");
  OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8");

  需要高效吗?
  BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
  BufferedWriter bufw =
  new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8"));

目前为止,10个流对象重点掌握。
  字符流:
  FileReader
  FileWriter

  BufferedReader
  BufferedWriter

  InputStreamReader
  OutputStreamWrier
  字节流:

  FileInputStream
  FileOutputStream

  BufferedInputStream 
  BufferedOutputStream

 

java基础知识回顾之javaIO类总结的更多相关文章

  1. java基础知识回顾之javaIO类---FileWriter和FileReader

    FileWriter类的构造方法定义如下: 1.public FileWriter(File file)throws IOException 字符流的操作比字节流操作好在一点,就是可以直接输出字符串了 ...

  2. java基础知识回顾之javaIO类--RandomAccessFile类

    java.io 类 RandomAccessFile java.lang.Object java.io.RandomAccessFile1.该类不是IO流中的子类.2.该类既能读又能写.3.该对象内部 ...

  3. java基础知识回顾之javaIO类--java序列化和反序列化

    /** *  * 一:理解序列化反序列化及其应用 * 序列化:把堆内存的对象转化成字节流的过程. * 反序列化:把字节流序列恢复重构成对象的过程. * 对象的序列化的用途:1.把对象的字节序列持久化, ...

  4. java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter

    FilenameFilter和FileFilter都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码:通过使用File类中String[] list(FilenameFi ...

  5. java基础知识回顾之javaIO类--File类

    File类是对文件系统中文件以及目录(文件夹)进行封装的对象,可以通过面向对象的思想来操作文件和目录(文件夹).File类保存文件或目录的各种元素的信息,包括文件名,文件长度,最后修改日期,是否可读, ...

  6. java基础知识回顾之javaIO类---BufferedInputStream和BufferedOutputStream

    MP3的复制过程: package com.lp.ecjtu; import java.io.BufferedInputStream; import java.io.BufferedOutputStr ...

  7. java基础知识回顾之javaIO类---InputStreamReader和OutputStreamWriter转化流

    InputStreamReader:是字节流通向字符流的桥梁: OutputStreamWriter 是字符流通向字节流的桥梁: package com.lp.ecjtu; import java.i ...

  8. java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片

    package com.lp.ecjtu; import java.io.FileInputStream; import java.io.FileNotFoundException; import j ...

  9. java基础知识回顾之javaIO类---BufferedReader和BufferedWriter

    使用了装饰设计模式:此类的设计是为了提高流操作数据的效率.思想就是定义容器将数据进行临时存储,对于缓冲区对象,其实就是将这个容器进行了分装,并提供了更高效的操作方法. BufferReader: pa ...

随机推荐

  1. Linux下修改计算机名

    SuSe操作系统: 1.  修改/etc/HOSTNAME 文件  ,其内容为计算机名. 输入命令:vi /etc/HOSTNAME 使用键盘上的 x 键一个一个删除所有内容 ,然后使用键盘上的 i ...

  2. Ubuntu格式化分区时的一个小错误

    admin@gpc:/$ sudo  mkfs -t ext3 -c /dev/sdb1 mkfs.ext3: inode_size (128) * inodes_count (0) too big ...

  3. 新浪微博客户端(9)-实现版本新特性的ViewPager

    "DJNewFeatureViewController.m" #import "DJNewFeatureViewController.h" #define NE ...

  4. wireshark基本用法及过虑规则

     wireshark基本用法及过虑规则 标签: wireshark基本语法wireshark使用方法wireshark包过虑规则 2015-02-03 18:44 10711人阅读 评论(0) 收藏  ...

  5. ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇(转)

    ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇   阅读目录 ASP.NET Identity 前世今生 建立 ASP.NET Identity 使用ASP.NET ...

  6. 抓包工具 wireshark

    http://fangxin.blog.51cto.com/1125131/735178

  7. cf.295.B Two Buttons (bfs)

     Two Buttons time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  8. (7)基本工作流(使用AndroidStudio编辑Cocos项目)

    接下来详细介绍一下如何使用Android Studio打开以及编辑cocos2d-x 3.10项目: 一.新建项目:   新建源代码项目,预编译库项目不支持使用Android Stduio打开,见图1 ...

  9. 解决 MySQL Cluster 通过 某一个MySqld节点新建表时,其他 MySqld节点 看不到表内容的问题

    问题: 总共有 4 个MySqld节点,通过其中的一个节点新建表时,发现其他 MySqld节点 查不到表内容的问题,即表没有同步过来. 解决方案: 主要是因为新建表时,所选的 表引擎 错误导致的,只能 ...

  10. NGUI无限滑动

    http://www.unity蛮牛.com/blog-9383-1391.html 最近由于工作需要,就开始研究NGUI滑动.刚开始参考NGUI自带的循环滑动,利用隐藏和显示,提高GPU的渲染,但是 ...