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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值