java I/O流概念及其体系结构

目录

一、I/O流概述

1、I/O流介绍

2、I/O流分类

3、I/O流程序书写流程 

二、字节流 

1、字节流概述

2、字节输入流FileInputStream 

3、 字节输出流FileOutputStream

4、缓冲高效字节流

5、flush()方法和close()方法区别

三、字符流

1、字符流读数据方式

2、字符流写数据方式

3、 字符(高效)缓冲流

四、转换流

五、标准输入输出流 

六、打印流 

七、对象流 

1、对象流的概述

2、对象输出流的介绍 

3、对象输入流的介绍 

4、将对象存储在集合中进行序列化和反序列化 

八、序列号serialVersionUID和transient关键字 


一、I/O流概述

1、I/O流介绍

        I和O,分别是Input和Output两个单词的缩写,Input是输入,Output是输出。     

        流:是一种抽象概念,是对数据传输的总称.也就是说数据在设备间的传输称为流,流的本质是数据传输。     

        IO流就是用来处理设备间数据传输问题的。常见的应用: 文件复制、文件上传、 文件下载等。

2、I/O流分类

        按照数据的流向:

                输入流:读数据         

                输出流:写数据     

        按照数据类型:粒度         

                字节流: 字节输入流和字节输出流         

                字符流: 字符输入流和字符输出流  

        字节流和字符流的使用场景:        

                如果操作的是纯文本文件,优先使用字符流        

                如果操作的是图片、视频、音频等二进制文件,优先使用字节流        

                如果不确定文件类型,优先使用字节流.字节流是万能的流

3、I/O流程序书写流程 

  1. 在操作之前,要导包,java.io包     
  2. 在操作流对象的时候,要处理解决异常(IOException)     
  3. 在操作完流对象之后,必须关闭资源, 所有流资源的关闭 close();

二、字节流 

1、字节流概述

  1. 字节流抽象基类: 以字节读写文件     
  2. InputStream:这个抽象类是表示字节输入流的所有类的超类     
  3. OutputStream:这个抽象类是表示字节输出流的所有类的超类 根据交互设备的不同,有不同的具体子类

2、字节输入流FileInputStream 

1)FileInputStream是InputStream一个具体子类,用于和磁盘上的文件进行交互

2)FileInputStream不仅可以一次读取一个字节,也可以一次读取很多个字节;不仅可以读取纯文本文件,也可以读取图片、视频、音频等非纯文本文件。一切数据在计算机中都是以字节的形式在存储和计算

3)构造方法:

        FileInputStream(File f):将一个File对象所表示的文件路径封装在一个字节输入流中,未来从文件中以字节方式读取文件内容      

        FileInputStream(String path):将一个字符串所表示的文件路径封装在一个字节输入流中,未来从文件中以字节方式读取文件内容   

注意事项:无论是哪个构造方法,都只能封装文件的路径,封装文件夹的路径没有任何意义,因为文件夹本身没有任何数据,所以也不能使用流对象读取数据

4)读取文件的方法:

1)int read():从当前的字节输入流中,读取并返回一个字节,返回值结果int类型, 表示读取到的字节对应的整数结果, 如果返回-1表示证明文件读取完毕

2)int read(byte[] arr):将最多arr.length个字节,读取到的字节放置到arr中,返回值结果int类型, 表示本次读取到的字节的个数, 如果读到-1,证明文件读取完毕

注意 :  1. 数组读取效率远远优于单个字节读取效能

            2 .实际开发中,数组大小一般都是1024的倍数, 常见: 1024  1024 * 4  1024 * 8

5)void close():关闭该流对象 

 

3、 字节输出流FileOutputStream

1)说明:可以将字节数据写出到指定的文件中

2)构造方法:      

FileOutputStream(File f):将f描述的路径文件封装成字节输出流对象    FileOutputStream(String path):将path描述的文件路径封装成字节输出流对象 FileOutputStream(String path,boolean append):如果第二个参数为true,则字节将写入文件的末尾而不是开头

FileOutputStream(File path,boolean append):如果第二个参数为true,则字节将写入文件的末尾而不是开头

3)字节流写数据的方式:

void write(int b): 将指定的字节写入此文件输出流一次写一个字节数据

void write(byte[] b): 将b.length字节从指定的字节数组写入此文件输出流

void write(byte[] b, int off, int len): 将len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流    </

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚上真睡不着

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值