IO流相关

1. IO概述

Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。

1.1 IO的分类

根据数据的流向分为:输入流输出流

  • 输入流 :把数据从其他设备上读取到内存中的流。

  • 输出流 :把数据从内存 中写出到其他设备上的流。

格局数据的类型分为:字节流字符流

  • 字节流 :以字节为单位,读写数据的流。

  • 字符流 :以字符为单位,读写数据的流。

windows自带的记事本能打开的就是纯文本文件

1.2 IO的流向说明图解

1.3 顶级父类们

输入流输出流
字节流字节输入流 InputStream字节输出流 OutputStream
字符流字符输入流 Reader字符输出流 Writer

这四个类都是抽象类

字节流:

FileOutputStream:

字节流输出细节:

FileOutputStream写数据的3种方式:

法1:

法2:

法3:法三中三个参数的意思分别是:数组、起始索引、个数(从数组a中的i索引开始写,写len个长度)

写数据的细节:

1、换行写出:\r\n

2、续写:同一文件的续写就是在FileOutputStream的构造时,第二个参数写true

FileInputStream:

read():每次读取一个字节的数据并移动一个指针,读取不到返回-1

FileInputStream书写细节:

FileInputStream循环读取:

FileInputStream读取数据的2种方法:read空参和实参

空参返回数据,实参返回读了多少个数据

法2中:

比如字节数组长度是几就一次性读几位,但一般选取1024 的整数倍

具体详解:读取过程中,会尽可能将数组读满,并填补在数组中

每次读2个,读取最后一次时,只剩下一位可读,原来数组只有第一位被替换,索引第二位d始终保持不变

如何改造?

文件拷贝实例:

法一:速度很慢的写法(read())

法二:速度很快的写法(read(byte[ ]))

try catch异常处理:添加Finally

以JDK9以后举例:

关于汉字存储:

UTF-8编码:

为什么出现乱码?

为什么拷贝中文不会乱码?

读取拷贝数据时,用的数据集和编码格式与数据源保持一致,所以不会乱码

编码与解码的实现:

字符流:遇到中文自动读多个字节

FileReader:

与字节流不同,这里的read空参会根据中英文不同,自动转换读取的字节数

空参和有参的细节区别:

空参时,返回的是解码返回的10进制的整数

有参时,返回的相当于:空参+强转char类型,将强转后的数据放到了数组中

FileWriter:

FileWriter书写细节:

字符输入流原理解析:存在缓冲区(字节流没有)

简单来说,在数据源和内存间传送数据时,内存区中存在缓冲区,这个缓冲区中存在一个8192的字节数组,他会在传输时将文件中的数据读取进来使得尽可能充满缓冲区,存在缓冲区中,如果缓冲区中没有数据了,就会继续去文件中读取,如果文中没有了就会返回-1

字符输出流原理解析:存在缓冲区,数据先存在缓冲区

两种方法将数据送往目的地:

1、缓冲区满了自动送往

2、使用flush刷新

3、close

字符流与字节流的使用场景

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值