IO流:

输入流、输出流

字节流、字符流:为了处理文字数据方便而出现的对象。

(其实这些对象的内部使用的还是字节流(因为文字最终也是字节数据,只不过,通过字节流读取了相对应的字节数,没有对这些字节直接操作,

而是去查了指定的(本机默认的)编码表,获取到了对应的文字。)

字符流就是 : 字节流+编码表。

缓冲区:提高效率的,提高谁的效率?提高流的操作数据的效率。

所以创建缓冲区之前必须先有流。

缓冲区的基本思想:其实就是定义容器将数据进行临时存储。

对于缓冲区对象,其实就是将这个容器进行了封装,并提供了更多高效的操作方法。

缓冲区可以提高流的操作效率。

Writer

|--TextWriter

|--MediaWriter

Writer

|--TextWriter write:往目的地

|--BufferTextWriter write:往缓冲区写

|--MediaWriter

|--BufferMediaWriter

想要写一些其他数据。就会子类。DataWriter,为了提高其效率,还要创建该类的子类。BufferDataWriter

Writer

|--TextWriter write:往目的地

|--BufferTextWriter write:往缓冲区写

|--MediaWriter

|--BufferMediaWriter

|--DataWriter

|--BufferDataWriter

Writer

|--TextWriter

|--MediaWriter

|--BufferWriter

|--DataWriter

独立完成缓冲区的建立

原理;

1,使用流的read方法从源中读取一批数据存储到缓冲区的数组中。

2,通过计数器记录住存储的元素个数。

3,通过数组的角标来获取数组中的元素(从缓冲区中取数据).

4,指针会不断的自增,当增到数组长度,会归0.计数器会自减,当减到0时,就在从源拿一批数据进缓冲区。

内容补足:

MyBufferedReader

LineNumberReader :可以定义行号。

---------

字符流:

FileReader

FileWriter

BufferedReader

BufferedWriter

字节流:

InputStream OutputStream。

操作文件的字节流对象。

FileOutputStream

FileInputStream

BufferedOutputStream

BufferedInputStream

字符流和字节流之间的转换动作。

转换流:

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"gbk");

FileReader fr = new FileReader("a.txt");

FileWriter fw = new FileWriter("b.txt");

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"));

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"gbk");

转换流:字节流+编码表。

转换流的子类:FileReader,FileWriter:字节流+本地默认码表(GBK)。

如果操作文本文件使用的本地默认编码表完成编码。可以使用FileReader,或者FileWriter。因为这样写简便。

如果对操作的文本文件需要使用指定编码表进行编解码操作,这时必须使用转换流来完成。

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

Java笔记(day20-22)的更多相关文章

  1. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  2. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  3. java笔记00-目录

    --2013年7月26日17:49:59 学习java已久,趁最近有空,写一个总结: java笔记01-反射:

  4. 转 Java笔记:Java内存模型

    Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ...

  5. Java设计模式(22)命令模式(Command模式)

    Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...

  6. servlet(6) - servlet总结 - 小易Java笔记

    垂阅前必看: 这都是我总结的我觉得是学习servlet应该掌握的,我在学习期间也做了一个博客项目来让所学的知识得以巩固.下面就是博客项目链接.前面的servlet相关的笔记总汇,还有就是我把觉得在学习 ...

  7. Java笔记 —— 继承

    Java笔记 -- 继承 h2{ color: #4ABCDE; } a{ text-decoration: none!important; } a:hover{ color: red !import ...

  8. Java笔记 —— 方法重载和方法重写

    Java笔记 -- 方法重载和方法重写 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red ...

  9. Java笔记 —— 初始化

    Java笔记 -- 初始化 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red !impo ...

  10. Java笔记 —— this 关键字

    Java笔记 -- this 关键字 h2{ color: #4ABCDE; } a{ color: blue; text-decoration: none; } a:hover{ color: re ...

随机推荐

  1. 类 文件 右下角呈现 红色小圆圈,里面有一个J 标记

    intellj(idea) 项目中类 文件 右下角呈现 红色小圆圈,里面有一个J 标记,表明此为 未设置为源文件,没有编译,本来应该是属于源文件的,结果现在没有被标记为源文件,也就没法编译了.

  2. windows VMware 安装mac 系统

    0x00 下载链接 首先肯定要有镜像: 链接:https://pan.baidu.com/s/190NBRBwNXVOYRxb6nodHeA 提取码:ahq5 然后还得有这个插件: 链接:https: ...

  3. linux知识点系列之 umask

    介绍 umask(user's mask)用来设置文件权限掩码.权限掩码是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限. UNIX最初实现时不包含umask命 ...

  4. E2. Send Boxes to Alice (Hard Version)

    秒的有点难以理解:https://blog.csdn.net/weixin_42868863/article/details/103200132 #include<bits/stdc++.h&g ...

  5. 如何可视化深度学习网络中Attention层

    前言 在训练深度学习模型时,常想一窥网络结构中的attention层权重分布,观察序列输入的哪些词或者词组合是网络比较care的.在小论文中主要研究了关于词性POS对输入序列的注意力机制.同时对比实验 ...

  6. 基于netty实现rpc框架-spring boot服务端

    demo地址 https://gitee.com/syher/grave-netty RPC介绍 首先了解一下RPC:远程过程调用.简单点说就是本地应用可以调用远程服务器的接口.那么通过什么方式调用远 ...

  7. Mysql数据操作指令

    -----多数据插入-----只要写一次insert指令,但是可以直接插入多条记录insert into table values(),(),(); 主键冲突我们插入值的时候,主键中已经存在某个值,插 ...

  8. py安装教程

    https://www.runoob.com/w3cnote/pycharm-windows-install.html

  9. 高性能的JavaScript,这是一个高级程序员必备的技能

    不知道大家有没有看过高性能JavaScript,这个书是一本好书,推荐有JavaScript的基础的同学可以看一看这本书. 下面是我根据这本书整理出来的知识: 1.将经常使用的对象成员.数组项.和域外 ...

  10. PHP中的11个魔术方法

    1.__get.__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的 __get( $property )       当调用一个未定义的属性时访问此方法__set( $property ...