Io流总结

IO

一串流动的数据   从数据源流动至目的地      以程序为中心     

分类

       流向              输入流   输出流

       操作单元       字节流   字符流

       功能              节点流(数据直接从数据源到目的地)

功能流(经过包装)

close()方法需要后接入的先关闭

字节流(万能流)

字节输入流   InputStream        流向:输入流  功能:节点流  自身为抽象类

       FileInputStream文件输入流

              从文件中获取输入字节

构造器

                     FileInputStream(File对象) FileInputStream(String地址)

              方法

                     read()                   每次读入一个字节 输出int字节(char类型)

                     read(byte[ ] b)     每次读入一个byte数组长度的字节数据 

输出int表示读入字节个数,若无返回-1

通过byte数组对数据进行操作

byte数组的长度通常设置为1024的倍数

                     read(byte[ ] b, int off, int len)  选择读取位置和长度

                     close()                  关闭

              结构步骤以及循环多次获取数据的代码

字节输出流   OutputStream     流向:输出流  功能:节点流  自身为抽象类

       FileOutputStream文件输出流

              构造器

                     FileOutputStream (File对象| String地址)

                     FileOutputStream (File对象| String地址, boolean append) 是否接续写入

                     (会自动创建文件,但不会自动创建父文件夹)

              方法

              void write(byte date);          写入单个字节

              void write(byte[ ] date)     写入byte数组,能够指定起始位置和长度

                                                        byte数组的长度一般设为1024的倍数

                     flush()                        刷新,继承自父类

                     close()                         关闭

              结构步骤

复制文件夹

       不能把文件复制到源文件所在路径

       目标路径不能为源文件的子路径

       目标文件的父路径若不存在,需要先创建目标文件的父路径

字符流

只能操作纯文本   节点流          txt文件html文件

字符输入流

Rader(抽象父类)->InputStreamReader->FileReader(文件字符输入流)

       FileReader

       构造器

              FileReader(File对象|String路径)

       方法(均继承自父类)

              read()                                 单个字符读取

              read(char[])                       字符数组读取      字符数组长度可设为1024的倍数

              read(char[],int off, int len) 字符数组读取并指定起始和长度

                     返回读取个数,若无读取返回-1

       结构步骤

字符输出流

Writer(抽象父类)-> OutputStreamWriter->FileWriter(文件字符输出流)

       FileWriter

       构造器

              FileWriter(File对象|String路径)

              FileWriter(File对象|String路径, boolean append)

是否采用接续写入 不影响本次输入

       方法(均继承自父类)

              writer(int)                                  写入单个字符

              writer(char[ ])                           写入字符数组

              writer(char[ ], int off , int len)   写入字符数组并指定起始和长度

              writer(String)                           写入字符串

              writer(String , int off , int len) 写入字符串并指定起始和长度

flush()                                      刷新,继承自父类

              close()                                       关闭

       结构步骤

缓冲流

用于增强传输功能和效率

1字节缓冲流(无重新改写方法)

              字节写入缓冲流   BufferedInputStream

              字节输出缓冲流   BufferedOutputStream

              通过构直接使用,直接嵌套在字节流外部,方法继承了父类

父类引用=new BufferedInputStream(new FileInputStream(File对象|Stream地址))

父类引用=new BufferedOutputStream(new FileOutputStream(File对象|Stream地址))

      

2字符缓冲流

       通过内部嵌套字符流实现   具备字符流原有方法

       字符读取缓冲流

              BufferedReader   新方法 readLine()读取一行

              自身引用=new BufferedReader(new FileReader(File对象|Stream地址))

       字符写入缓冲流

              BufferedWriter    新方法 writerLine()写入换行

              自身引用=new BufferedWrieter(new FileWrieter(File对象|Stream地址))

基本数据类型流

适用字节输入流

1用于读写带有基本数据类型和String类型的数据

       2构造参数为字节流或字节缓冲流

       3存在重写方法,需要通过自身引用接收

读取流DataInputStream(InputStream)    

       新增方法(读取各类数据)

              readInt()        readdouble()         readBoolean()       readUTF()字符串

写入流DataOutputStream(OutputStream)

       新增方法(写入各类数据)

              writerInt(int)  writerDouble(double)   writerBoolean(boolean)      writerUTF(String)

注意:读取写入顺序

对象流

序列化:将对象信息转换为可存储或者可传输的信息格式

对象流(先序列化后反序列化)

       序列化输出流      ObjectOutputStream         

       反序列化输入流   ObjectInputStream            

       构造方法的参数均为字节流或字节流的缓冲流

1序列化输出流 ObjectOutputStream out=

new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(File对象)));

       新增方法

       writer数据类型(对应类型的数据)     对各类数据写入

       writerObject(Object)                         将对象写入

       writerObject(数组)                            将数组写入

2反序列化输入流 ObjectInputStream in=

new ObjectInputStream(new BufferedInputStream(new FileInputStream(File对象)));

       新增方法

       read数据类型(对应类型的数据)       读取各类数据

       writerObject(Object)                         读取对象信息

       writerObject(数组)                            读取数组

3能够被序列化的对象

       实现了空接口 java.io.Serializable   或父类已经实现了Serializable接口

       不需要序列化的属性 加transient修饰

静态的内容不能被序列化  若使用原类对象接收,静态值为当前静态区中的内容

转换流(了解)

       将字节流转为字符流使用(能够使用字符流的方法)

       构造器:

       InputStreamReader(InputStream,String charset)      参数为:字节流对象和编码格式

OutputSteamWriter(OutputSteam,String charset)    参数为:字节流对象和编码格式

可能出现乱码的情况:

1.字符编码格式不统一

2.缺少字节个数

 不同编码格式汉字所占字节大小:

ISO-8859-1    1个字节

GBK               2个字节

GB2312         2个字节

UTF-8            3个字节

posted @ 2019-06-13 08:36  小布大佬  阅读(246)  评论(0编辑  收藏  举报