JAVA IO流简单总结

按照流的方向:

  1. 输入流:InputStream,Reader  
  2. 输出流:outputStream,Writer

按照数据类型:

  1. 字节流(byte) , InputStream,outputStream 
  2. 字符流(char) Reader,Writer

按照实现功能

  1. 节点流:从特定的地方读写数据。如FileReader.
  2. 处理流:是对已存在的流的封装实现数据读写。构造方法需要其他的流对象做参数。又叫流的链接,BufferedReader. 。

节点流:  

  • 文 件   :FileInputStream,FileOutputStrean,FileReader, FileWriter   
  • 数 组   :ByteArrayInputStream ,ByteArrayOutputStream, CharArrayReader, CharArrayWriter  
  • 字符串:StringReader, StringWriter  
  • 管 道  :PipedInputStream ,PipedOutputStream, PipedReader,PipedWrite

常用处理流(关闭处理流使用关闭里面的节点流)

  • 缓冲流:BufferedInputStrean,BufferedOutputStream,BufferedReader,BufferedWriter--- 增加缓冲功能,避免频繁读写硬盘。
  • 转换流:InputStreamReader,OutputStreamWriter-字节流和字符流转换。
  • 数据(特殊)流 DataInputStream,DataOutputStream -将基础数据类型读写到文件
  • 序列流:SequenceInputStream,SequenceOutputStream
  • 序列化:ObjectInputStream,ObjectInOutputStream

流的关闭顺序:

  1. 先打开的后关闭,后打开的先关闭
  2. 看依赖关系,先关依赖者,后关被依赖者。
  3. 可以只关闭处理流,不用关闭节点流。处理流关闭的时候,调用其处理的节点流的关闭方法。

注意:

  1. 如果将节点流关闭以后再关闭处理流,会抛出IO异常。
  2. 如果关闭了处理流,在关闭与之相关的节点流,也可能出现IO异常。(hadoop编程文件流操作中遇到了。)

继续总结:

4个流:InputStream,outputStream, Reader ,Writer

节点流:File,ByteArray,CharArray,String,Piped

处理流:Buffered,Reader,Data,Sequence,Object

总结:通常继承自Filter开头的流是处理流。

File类创建获取文件信息。

绝对路径是固定的从盘符开始,相对路径相对于某个位置,指当前项目下,在dos下

  • File(String pathname):根据路径得到File
  • createNewFile():创建文件
  • mkdir():创建文件夹
  • delete():删除文件或文件夹
  • isDirectory():判断是否是目录
  • isFile():判断是否是文件
  • exists():判断是否存在
  • getName():获取名称
  • list():获取指定目录下的所有文件或的名称数组
  • listFiles():获取指定目录下的所有文件或者文件夹的File数组
  • list(FilenameFilter filter)

缓冲思想:字节流一次读写一个,数组比字节块,提供了字节缓冲区流

BufferedInputStream:

  • 内置了一个缓冲区(数组)
  • 读取一个字节
  • 一次读取8192个, 存在缓冲区, 返回给程序一个
  • 使用完读取

BufferedOutputStream:

  • 内置了一个缓冲区(数组)
  • 写出字节,先写到缓冲区
  • 缓冲区写满, 数据一次性写到文件

总结 File文件不用关闭流,stream必须关闭流。

flush()方法: 刷新缓冲区,刷新后可以再次写出

close()方法:关闭流释放资源的的,关闭流之前刷新缓冲区。

字符流(Reader和Writer):

  • 直接读写字符的IO流
  • 读取时字节转为字符. 写出时字符转为字节. 

字符流场景

  • 拷贝文本文件不推荐. 因为读取时字节转为字符, 写出时字符转回字节.
  •  读写一段文本,
  • 按照字符的大小读取,无中文
  • 将字符串写出,不转换为字节数组

字符流缺点:

  • 不能拷贝非纯文本文件
  • 读取时字节转为字符找不到对应,就会用?代替,写出乱码

在指计算中流动的缓冲区。

从外部设备流向中央处理器的数据流成为“输入流”,反之成为“输出流”。

字节和字符区别

  • 字节流读到字节就返回;字符流读到字节查编码表转化为字符返回。
  •  字节流处理所有类型数据,字符流处理字符数据。
  1. FileInputStream的available():下一次读取的剩余字节数。
  2. BufferedInputStream(InputStream in,int size):指定缓冲区大小
  3. InputStream的skip(long n):忽略输入流中的n个字节

不同的流:

  1. Piped(管道流):实现管道,线程中使用
  2. Sequence(序列流),:把多个流合并为一个,如:传入流集合。
  3. Object(序列化流):字节序列化为对象,对象反序列化字节
  4. Reader(转换字符流):构造函数传入流对象。如InputStreamReader构造函数传入InputStream

FileOutputStream的构造方法传入文件路径,其内部使用了File对象打开文件。

总结:

  • Object虽然可以序列化,但是它是处理流,需要节点流做构造函数参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值