流对象的初识

流对象

1.IO流
集合与IO流的交集

Properties

Properties 类代表一个持久的一组属性。Properties`可以保存到一个流或从流加载。属性列表中的每个键及其对应的值是一个字符串。

  • setProperty(String key, String value) 底层还是调用put方法

  • getProperty(String key) 搜索的属性指定的键在此属性列表中。

    与IO流相结合的方法:

    void load(InputStream|Reader)

    void store(OutputStream| str描述)


在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类)

​ 分类:按照数据的流向分为

输入流:读数据 输出流:写数据

​ 分类:按照数据类型来分

字节流: 字节输出流;字节输入流

字符流:字符输入流;字符输出流

1.1字节流

​ 超类:Inputstream 表示字节输入流的所有类的超类,子类名称都是以其作位后缀

​ 超类:Outputstream 表示字节输入流的所有类的超类,子类名称都是以其作位后缀

input用来读数据,output用来写数据
注意这里的读写数据是以内存的视角来看的 //从内存输出到磁盘就是写数据,从磁盘输入到内存就是读数据
1.1.1字节流的子类

​ Fileoutputstream(“地址”) :创建字节输出流对象,让对象指向文件地址的磁盘区域

                 ```
                 write(int|byte[]|byte[],int off,int len)
                 一次写一个字节|一次写一个字节数组|一次写一个自定义长度的字节数组
                 ```

​ FileInputstream(“地址”) :通过打开与实际文件的链接创建一个对象

read(空|byte[]|)
一次读一个字节|一次读一个字节数组|
字节缓冲流

因为原生的字节流读写的时候直接与磁盘交互,如果一次读的字节数组长度较小的话就会多次打开关闭磁盘,消耗时间性能

用字节缓冲流读取文件,读取文件的时候先会将读数的数据缓存到字节缓冲流的内置8129字节的缓冲区中,如果满了才会与磁盘交互一次,

1.2字符流

​ 中文如果用GBK编码一次占一个字节,如果用UTF-8一次占3个字节,编码getbytes() 解码:string()

由于字节流操作中文不是很方便,所以java就提供了字符流

​ 超类:Reader:字符输入流的抽象类,子类名称都是以其作位后缀

​ 超类:Writer:字符输出流的抽象类,子类名称都是以其作位后缀

1.2.1字符流的子类
  • InputStreamReader是桥字节流和字符流:它读取字节并使用指定的 charset解码成字符。

    读数据的两个方式
    read(空|char[])
    返回: ac码|读到的个数
    
    如果默认本地编码用简化类FileReader(字符串地址)
    
  • OutputStreamWriter是桥字节流从字符流:字符写入它编码成字节 charset指定使用。

    写数据的五种方式
    write(int c|char[]|char[],int off,len|string str|string str,int off,len)
    写入一个字符|写入一个字符数组|写入字符数组的一部分|写入一个字符串|写入一个字符串一部分
    
     如果默认本地编码用简化类FileWriter
    //底层还是用字节流与磁盘交互,
    
字符缓冲流

因为原生的字节流读写的时候直接与磁盘交互,如果一次读的字节数组长度较小的话就会多次打开关闭磁盘,消耗时间性能

用字符缓冲流读取文件,读取文件的时候先会将读数的数据缓存到字符缓冲流的内置8129字节的缓冲区中,如果满了才会与磁盘交互一次,

特有功能: void newLine() 写一行分隔符换行 —writer

​ String readline() 读一行文字 ----reader

2.标准输入输出流
2.1

System中有两个静态的成员变量:

​ public static final InputStream in 标准输入流:通常该流对应键盘输入或由主机环境或者用户指定的另一个输入源

​ public static final OutputStream out 标准输出流 :通常该流对应显示输出或由主机环境或者用户指定的输出目标

键盘的输入输出就是基于这个实现的
        byte[] b1 = new byte[1024];
        while ((read= System.in.read(b1))!=-1){
            System.out.write(b1);
        }
java给我们提供了Scanner
打印流
  • 字节打印流

    PrintStream

    system.in的对应目标源是控制台,但是可以传文件地址创建新的打印流对象链接指定文件

    有自己的特有方法写数据print()

  • 字符打印流

    PrintWriter

3.对象序列化流和反序列化流

强烈建议每个序列化对象给一个指定的序列化Id

3.1对象序列化流

ObjectOutputStream

​ 将java对象的原始数据类型和图形写入OutputStream,可以使用ObjectInputStream重构对象,可以通过使用流的文件来实现对象的持久存储,如果流是网络套接字流,则可以在另一个主机或者另一个进程重构对象

​ 构造方法:参数(OutputStream out)创建一个写入指定OutputStream的对象序列化流对象

方法:writeObject(obj)

注意:一个对象想要被序列化必须实现Serializable接口(起标记作用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值