Day19_Java(8.19)_IO流

Day19_Java_IO流

流的分类:
1.根据数据的流向
输入流和输出流
2.根据数据的类型
字节流和字符流
3.根据流的功能
包装流和基础流(处理流和节点流)
Java中流就是一个对象
JDK中提供很多流的类(java.io包)
以InputStream和OutputStream结尾
以Writer和Reader结尾
字节输入流(InputStream),字节输出流(OutputStream)
字符输入流(Reader),字符输出流(Writer)

1.InputStream,OutputStream
输入流提供了读的方法
read();//一个字节一个字节的读
read(byte[]);//一部分一部分读
read(byte[],int off,int len)
输出流提供了写的方法
write(int i);//写出对应的字节
write(byte[] b);//写出对应的字节数组
write(byte[] b,int off,int len);
2.FileInputStream,FileOutputStream
1).根据业务逻辑确定要使用什么流
2).选择好流之后对流进行初始化
3).使用读取方法read和写入方法write进行操作
4).使用完毕之后记得手动关闭资源
3.BufferedInputStream,BufferedOutputStream
缓存流,字节流
主要是用来提升效率的
注意谁是基础流,谁是包装流
read(byte[]);读取一个byte数组
write(byte[], off, len)这个冷是实际读到的字节数,没有必要全部吧byte数组的长度读出来,会造成多读
4.DataInputStream,DataOutputStream
字节流/包装流/数据流
读写java基本数据类型
一般不会从文件中读取
作为一个数据的持久化来做的,一般做法,把基本数据类型保存到文件中作为持久化的一个方式,然后等到需要的时候再从中读出来
5.ObjectInputStream,ObjectOutpurStream
读写对象类型的数据
向文件中写出一个对象保存
向文件中读出一个对象保存
序列化:该对象具有能够变成字节的权利,可以通过字节流保存到文件里
反序列化:可以从文件中读取并且通过字节序列构建一个对象
如何让对象实现序列化
java.io.Serializable 接口
让该对象的类实现接口
transient:标记被序列化的对象的属性透明化,不参与序列化,只能修饰变量,不可修饰其他内容
建议:使用实现 Serializable 接口进行序列化,并且在文件操作和网络操作中所有的类都要实现序列化
6.PipedInputStream,PipedOutStream
管道流,字节流,基础流
一般用来解决多线程的数据访问问题
需要使用connect方法将管道输出和管道输入流连接起来,达到一个线程通信的目的,其中管道流的read方法具有线程阻塞的作用
一般不用在单线程中,容易出现死锁
7.Reader,Writer
字符输入流和字符输出流的超类
作为抽象类一般不直接产生实例,需要靠其子类完成功能
8.FileRead,FileWriter
文件流,字符流基础流
9.InputStreamReader,OutputStream
转换流,字符流,中间流
为什么只提供了字节转字符,没有提供字符转字节
效率:字符流比字节流好
范围:字节流比字符流使用范围广
10.BufferedReader,BufferedWriter
缓冲流,字符流,包装流
只有字节流转字符流,没有字符转字符转字节
效率:字符比字节流好
范围:字节流比字符流使用范围广
对应的缓冲流要记得flush;
建议:对输出流操作完成之后要使用功能flush
11.PrintStream,PrintWriter
打印流
为输出流提供了更方便的输出方式
字节的操作使用Stream,字符的操作使用Writer
记得flush
可以更改系统类Stream的out的对象的指向(setout(new printStream))
12.随机访问流RandomAccessFile
既能读又能写
一般使用在大文件上
seek(long);
getPointer()//获取此文件中当前偏移量
需求:文件如果有更改,则只读更改的部分,如果没有更改,则不读
r:只读
rw:读写
13.File类
java.io包
流中用到的比较多
本机上的文件—>抽象成类–>产生对应的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值