在Java中流的对象太多,开发时不知道用哪个对象,所以要清楚流的操作规律。

一、想清楚开发时用到哪些对象,只要通过四个明确即可。

1、明确源和目的(汇)

数据源:InputStream、Reader

目的:OutputStream、Writer

2、明确数据是否是纯文本数据。

源:是纯文本:Reader

否:InputStream

目的:是纯文本:Writer

否:OutputStream

到这里,就可以明确需求中具体要使用哪个体系。

3、明确具体的设备。

源设备:

硬盘:File

内存:数组

键盘:System.in

网络:Socket流

目的设备:

硬盘:File

控制台:System.out

内存:数组

网络:Socket流

4、是否需要其他额外功能

1、是否需要高效(缓冲区):

是:加上Buffered

2、是否需转换:

是:InputStreamReader、OutputStreamWriter

否:InputStream   、OutputStream

3、是否需要指定编码:

是:InputStreamReader、OutputStreamWriter   转换流中拥有指定编码的构造函数。默认为系统平台的编码

二、需求

需求1:复制一个文本文件。

,明确源和目的。
        源:InputStream Reader
        目的:OutputStream  Writer
    2,是否是纯文本?
        是!
        源:Reader
        目的:Writer
        
    3,明确具体设备。
        源:
            硬盘:File
        目的:
            硬盘:File
    
        FileReader fr = new FileReader("a.txt");
        FileWriter fw = new FileWriter("b.txt");
        
    4,需要额外功能吗?
        需要,需要高效。
        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
        目的:
            硬盘。File
            
        InputStream in = System.in;
        FileWriter fw = new FileWriter("b.txt");
        这样做可以完成,但是麻烦。将读取的字节数据转成字符串。再由字符流操作。
    4,需要额外功能吗?
        需要。转换。    将字节流转成字符流。因为名确的源是Reader,这样操作文本数据做便捷。
            所以要将已有的字节流转成字符流。使用字节-->字符 。InputStreamReader
        InputStreamReader isr = new InputStreamReader(System.in);
        FileWriter fw = new FileWriter("b.txt");
        
        还需要功能吗?
        需要:想高效。
        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));

需求3:将一个文本文件数据显示在控制台上。

1,明确源和目的。
        源:InputStream Reader
        目的:OutputStream  Writer
    2,是否是纯文本呢?
        是,
        源:Reader
        目的:Writer
    3,明确具体设备
        源:
            硬盘:File
        目的:
            控制台:System.out
            
        FileReader fr = new FileReader("a.txt");
        OutputStream out = System.out;//PrintStream
    4,需要额外功能吗?
        需要,转换。
        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,明确额外功能?
        需要转换,因为都是字节流,但是操作的却是文本数据。
        所以使用字符流操作起来更为便捷。
        InputStreamReader isr = new InputStreamReader(System.in);
        OutputStreamWriter osw = new OutputStreamWriter(System.out);
        
        为了将其高效。
        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

5,将一个中文字符串数据按照指定的编码表写入到一个文本文件中。

1,目的。OutputStream,Writer
    2,是纯文本,Writer。
    3,设备:硬盘File 
    FileWriter fw = new FileWriter("a.txt");
    fw.write("你好"); 
    
    注意:既然需求中已经明确了指定编码表的动作。
    那就不可以使用FileWriter,因为FileWriter内部是使用默认的本地码表。
    只能使用其父类。OutputStreamWriter.
    OutputStreamWriter接收一个字节输出流对象,既然是操作文件,那么该对象应该是FileOutputStream
    
    OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt"),charsetName);
    
    需要高效吗?
    BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),charsetName));

什么时候使用转换流呢?

1,源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁。
        提高对文本操作的便捷。
    2,一旦操作文本涉及到具体的指定编码表时,必须使用转换流 。

IO流——(8) 流的操作规律相关推荐

  1. Java IO流操作规律

    2019独角兽企业重金招聘Python工程师标准>>> IO流主要负责数据的传输. 划分: 按流向分:输入流,输出流: 按数据分:字节流,字符流 抽象基类: 字节流的抽象基类: In ...

  2. 黑马毕向东Java课程笔记(day19-11——19-22)IO字节流:字节流及其读取、字节流缓冲区、自定义字节流(读取)的缓冲区、读取键盘的输入、读取/写入转换流、流操作规律

    1.字节流--File   字节流的介绍 字符流:(一个字符2个字节16位) FileReader FileWriter. BufferedReader BufferedWriter字节流:(一个字节 ...

  3. Java基础IO流概述、字符流、字节流、流操作规律、File类、Properties类、打印流、序列流

    IO流:(Input Output)流 字符流的由来:其实就是字节流读取文字字节数据后,不直接操作而是先查指定的码表,获取对应的文字进行操作 简单说:字符流 = 字节流 + 编码表 字节流的两个顶层父 ...

  4. JavaIO流(2)--IO流原理、流的分类及节点流文件流操作

    文章目录 IO流简介 IO流原理 流的分类 IO 流体系 节点流和处理流 节点流操作 IO流简介 I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于处理设备之间的数据传输.如读 ...

  5. Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,转换流,随机访问流,合并流,序列化流,Properties...

    你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新 ...

  6. -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流...

    File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) •p ...

  7. IO流案例以及特殊操作流/对象对象序列化流/Properties集合

    文章目录 IO流案例 复制单级文件夹 复制多级文件夹 IO特殊操作流 标准输入流 字节打印流 字符打印流 对象序列化流 serialVersionUID&transient Propertie ...

  8. Java基础 -IO入门简介、文件操作、与IO流分类简述

    文章目录 IO流入门概念 文件概念 什么是文件 文件流 文件常用操作 创建文件对象相关构造器和方法 创建文件案例 注意 获取文件相关信息 目录的操作和文件删除 delete mkdir.mkdirs ...

  9. IO流进行文件读写操作

    IO流进行文件读写操作 一.Java程序读excel文件 excel文件分为xls,xlsx和csv文件. 1.xls和xlsx的主要区别是版本不同: xls是excel2003及以前版本所生成的文件 ...

最新文章

  1. RHEL6系列更换epel源
  2. [转]Hyper-V功能大跃进 或引发市场洗牌
  3. 一个高并发请求的算法
  4. 数组元素数组中的元素通过解析字符串参数获得
  5. import引入json文件_关于TypeScript中import JSON的正确姿势详解
  6. 课时76.兄弟选择器(掌握)
  7. STM32F1笔记(十)PWM
  8. Visual Basic .NET处理Excle表格全接触
  9. 对老赖 绝不要忍 !一位美女程序媛的讨薪经历...
  10. 秦九韶算法递推公式_如何教会女友递归算法?
  11. html鼠标悬停文字变颜色,鼠标悬停,文字颜色逐渐改变是怎样实现的??
  12. 【美少女】阿里巴巴实习三个月总结
  13. SDNU_ACM_ICPC_2020_Winter_Practice_2nd C 离散化, lower_bound
  14. Zynga公布2020年第四季度及全年财务业绩
  15. 自定义监控项及告警升级
  16. jzoj2574 统计方案
  17. Python基础知识总结(期末复习精简版)
  18. 数学复习全程规划及方法指导(武忠祥笔记)
  19. 0xC0000005: 读取位置 0x00000001 时发生访问冲突
  20. 70个数据分析工具,必须收藏!

热门文章

  1. oracle 11g rac adg 搭建实施
  2. 铝板规格及产品分类、用途知识一览
  3. 新闻稿写作的具体要求是什么?
  4. Link 错误:1104 1181
  5. 维修Dell R920服务器黄灯VLT0304梭哈
  6. cifar-10数据集+ResNet50
  7. bzoj2066: [Poi2004]Gra
  8. ChatGPT 官方版 API,终于来了!
  9. 自学AE AK大神笔记001_简易替换背景
  10. UPC10525: Dove 打扑克