IO流知识块学习有感

目录

IO流的概念和作用

字节流和字符流

缓冲流与转换流

文件输入输出流

序列化和反序列化

打印流

总结


IO流的概念和作用

概念:存储和读取数据的解决方案;

作用:用于读写本地文件,网络等相关数据;

分类:

    输入流:  程序→文件;

    输出流:  文件→程序;

按照操作文件类型分类:

    字节流:   可以操作所有类型的文件;

    字符流:   只能操作纯文本文件.

字节流和字符流

字节流:

①   FileOutputStream         操作本地文件的字节输出流

方法:

书写步骤: ①创建字节输出流对象 ②读取数据(write方法) ③释放资源即关流(close方法).

②   FileInputStream            操作本地文件的字节输入流

方法:

书写步骤:  ①创建字节输出流对象 ②读取数据(read方法) ③释放资源即关流(close方法).

注意点:    i  如果读取文件不存在会直接报错;

               ii 一次读一个字节,读出的数据为ASCII上对应的数字,可用char类型转换;

               iii 读到文件末尾,read方法返回-1.

若要循环读取数据,需引进一个变量将read方法读取的数据赋值给该变量进而循环读取,否则read方法读取后会移动指针,造成数据缺失.

字符流:

①   FileReader                     操作本地文件的字符输入流

方法:

i   按字节进行读取,遇到中文一次读多个字节,读取后解码,并返回一个整数;

ii  读到文件末尾,read方法返回-1.

若为read无参方法,则打印输出需要进行char类型数据强转;若是read有参方法则包含着强转.

②   FileWrite                          操作本地文件的字符输出流

构造方法:

成员方法:

书写步骤:  ①创建字节输出流对象   ②读取数据(write方法)   ③释放资源(close方法).

tips:   

       i    参数是字符串表示的路径或者File对象都是可以的;

      ii    如果文件不存在时会创建一个新的文件,但要保证父级路径是存在的;

     iii    如果文件已经存在,则会清空文件,若不清空文件则需打开续写文件(true).

缓冲流与转换流

缓冲流:

①字节缓冲流:       

       BufferedInputStream      字节缓冲输入流

       BufferedOutputStream   字节缓冲输出流

原理:底层自带了长度为8192的缓冲区,提高的数据读取效率.

方法:

②字符缓冲流:

       BufferedReader          字符缓冲输入流

       BufferedWrite              字符缓冲输出流

特有方法:

输入流

输出流

缓冲流可以提高IO效率,它通过在内存中建立缓冲区来减少对外部设备的访问次数 , 在处理大量数据时,使用缓冲流可以显著提升程序的性能.

转换流:

              InputStreamReader 字符转换输入流

              OutputStreamReader 字符转换输出流

作用:       指定字符集读取数据(jdk11之后已被淘汰);   

                字节流要使用字符流中的方法.

文件输入输出流

File类:

① File对象表示路径,可以是路径,也可以是文件夹. 路径可以是存在的,也可以是不存在的.

② 绝对路径是带盘符的;相对路径不是不带盘符的,默认到当前项目下去找.

File三种构造方法及作用:

①   public  File(String  pathname)                                    把字符串表示的路径变成File对象

②   public  File(String  parent ,  String  child)                   把父级路径和子级路径进行拼接

③   public  File(File  parent ,  String  child)                       把父级路径和子级路径进行拼接

方法:

File常见成员方法(判断 ,  获取)

File常见成员方法(删除 , 创建)

File常见成员方法(获取并遍历)

以用于读取和写入文件,通过文件输入输出流,可以实现文件的复制、移动、删除等操作。

序列化和反序列化

序列化流又称对象流,用于存储和读取基本数据类型数据或对象的处理流.

①   ObjectOutputStream                  序列化流(对象操作输出流)

作用: 将java中的对象写到本地文件当中.

构造方法:

成员方法:

②   ObjectInputStream                     反序列化流(对象操作输入流)

作用: 将序列化到本地文件中的对象读取到程序中来.

构造方法:

成员方法:

注意点:

1: 使用序列化流将对象写到文件时,需要让Javabean类实现Serializable接口,否则会出现NotSerializableException 异常; 该接口无抽象方法,为标记型接口.实现该接口,类可以被序列化(相当于一个物品的合格证);

2.序列化流写到文件中的数据是不能修改的,一旦修改则无法再次读回;

3.序列化对象后,修改了Javabean类,再次反序列化会出现问题,抛出InvalidClassExpection异常; 解决方案: 给Javabean类添加serialVersionUID(序列号 , 版本号 , 避免在反序列化时出现版本不一致的问题.这样做可以提高程序的稳定性和可靠性);

4.如果一个对象中的某个成员变量不被序列化,则可以给该成员变量添加transient关键字修饰,该关键字标记的成员变量不参与序列化过程.

打印流

①  PrintStream              字节打印流

特点:    ①打印流只操作文件目的地,不操作数据源;

            ②特有的写出方法 , 数据原样写出;

            ③特有的写出方法,可以实现自动刷新,自动换行.

构造方法:

成员方法:

②   PrintWrite                字符打印流

区别:字符流底层有缓冲区,效率更高,若要自动刷新需要重启.

构造方法和成员方法同上.

总结

      本周学习了IO流知识模块,内容感觉较多,需要我不断复习应用以及练习。下周需要写一个练习了,自己要维持好状态,完成好任务。

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值