Java的输入与输出(IO)

是一组数据运输的通道,按照流向可以分为输入流和输出流;按照功能可以分为结点流和处理流;按照处理数据的类型可以分为字节流和字符流。下面是Java的API为我们提供的操作IO的抽象类和接口。
在这里插入图片描述
下面将主要围绕这四大抽象类及其实现类讲解:
输入流:可以从其中读入一个字节序列的对象称做输入流。数据源到程序。
输出流:可以向其中写入一个字符序列的对象称做输出流。程序到目的地。
节点流:可以直接从数据源或目的地读写数据。
处理流(包装流):不直接连接到数据源或目的地,是其它流进行封装。目的主要是简化操作和提高性能。
节点流和处理流的关系
①节点流处于IO操作的第一线,所有操作必须通过他们进行;
②处理流可以对其它流进行处理(提高效率或操作灵活性)。
字节流:按照字节读取数据(InputStream、OutputStream)
字符流:按照字符读取数据(Reader、Writer),因为文件编码的不同,从而有了对字符进行高效操作的字符流对象。
原理:底层还是基于字节流操作,自动搜寻了指定的码表。
IO操作中几个常用的方法
字符串–>字节数组 getByte()
字节数组–>字符串 new String(datas)
字符串–>字符数组 toCharArray()
出现乱码的原因
①字节数不够
②字符集不统一
IO操作的标准步骤
1.创建源
2.选择流
3.操作
4.释放
文件字节流
FileInputStream:通过字节的方式读取文件,适合读取所有类型的文件(图像、视频等),全字符请考虑FileReader。
FileOutputStream:通过字节的方式写出或追加数据到文件,适合所有类型的文件(图像、视频等)。全字符请考虑FileWriter。
文件流
FileReader:通过字符的方式读取文件,仅适合字符文件(纯文本)。
FileWriter:通过字节的方式写出或追加数据到文件中,仅适合字符文件(纯文本)。
字节数组流
ByteArrayInputStream
ByteArrayOutputStream
字节数组流就是将文件流的源头由文件换成电脑上的一块内存(网络上的内存、远程服务器上的内存)。
1.源头换成内存数组
2.字节数组不用关
3.任何东西都可以转成字节数组
4.字节数组不要太大
字节缓冲流:提高操作(读写)的性能
1.提高了性能
2.最底层一定是节点流
3.释放(从里到外释放)
BufferedInputStream
BufferedOutputStream
字符缓冲流
BufferedReader
BufferedWriter
新增:readLine()、newLine()
转换流
1.将字节流转成字符流,方便处理;以字符流的形式操作字节流(纯文本的)
2.指定字符集
InputStreamReader
OutputStreamWriter
是字节流与字符流之间的桥梁,能将字符流转换为字节流,并且能为字节流指定字符集,可处理一个个的字符。
数据流
DataInputStream
DataOutputStream
不仅保留了数据,还保留了数据类型,在处理的时候要保持顺序一致
1.写出后读取
2.读取的顺序与写出保持一致
对象流
ObjectInputStream 反序列化
ObjectOutputStream 序列化
1.写出后读取
2.读取的顺序与写出保持一致
3.不是所以后的对象都可以序列化 Serializable
transient 该数据不需要序列化
打印流
PrintStream
PrintWriter
文件分割
RandomAccessFile
seek()
序列流
SequenceInputStream

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值