1、IO流是做什么的?
2、IO的分类:
按流向分:可以分成读和写
按类型分,可分为字符流和字节流
3、IO流的体系结构:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jy0MFc2q-1659543003407)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bf40da15d11b4e43a6cc406bc7394e9c~tplv-k3u1fbpfcp-watermark.image?)]](https://img-blog.csdnimg.cn/01b27347dffa4ecbbefad133e737ab2b.png)
4、字节流写出数据:FileOutputStream
//1、创建字节输出流对象
FileOutputStream fileOutputStream=new FileOutputStream("a.txt");
//2、写出数据
fileOutputStream.write(97);
fileOutputStream.write(98);
fileOutputStream.write(99);
fileOutputStream.write("罗兆你要自强".getBytes(StandardCharsets.UTF_8));
//3、关闭流,释放资源。
fileOutputStream.close();
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WEcd2Ksj-1659543003408)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/155008c0fd344a1ba19e748da09892a9~tplv-k3u1fbpfcp-watermark.image?)]](https://img-blog.csdnimg.cn/a470d9ab31684bdd894b5335103e96fe.png)
4.1、FileOutputStream的构造方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f3lJleZk-1659543003408)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/906072a373ee4182b1b53b9ec8f8528f~tplv-k3u1fbpfcp-watermark.image?)]](https://img-blog.csdnimg.cn/99c52790725b4e65af2929e3eda406d8.png)
4.2 FileOutputStream的成员方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lcHBxgTb-1659543003409)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3c9ec3963adf4220bbdae9d4052982ef~tplv-k3u1fbpfcp-watermark.image?)]](https://img-blog.csdnimg.cn/bcdeff2140f94acf816954a5041fb2c2.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DiUnrO6F-1659543003409)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/78666df5ca7a42469f8527b43e503280~tplv-k3u1fbpfcp-watermark.image?)]](https://img-blog.csdnimg.cn/d7d60958e8bd4b77ae815862855cdd53.png)
4.3 字节流写时候-换行操作
window:系统下 \r\n、\r、\n 3种方式(推荐使用\r\n,因为另外2种换行符可能不适用于Win7、Win8)
mac:\r
linux:\n
5、字节输入流(读取)FileInputStream
5.1 一次读取一个字节
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r9kLdch6-1659543003410)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/304a5de4145a44a1b8bc7c993acb6db1~tplv-k3u1fbpfcp-watermark.image?)]](https://img-blog.csdnimg.cn/8e8f7bade16f47b5b52e12fa9e5609c3.png)
5.2 构造方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tn76gb14-1659543003410)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bfadb3e8a4564eb3907cf4015b39ff18~tplv-k3u1fbpfcp-watermark.image?)]](https://img-blog.csdnimg.cn/a09dfe37bce24cd593abc7171d762b8d.png)
5.3 返回-1说明读取到行尾了,所以只要返回的不是-1就可以继续读。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lpq6TPHZ-1659543003410)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f59f75469f024ba78da47522215da434~tplv-k3u1fbpfcp-watermark.image?)]](https://img-blog.csdnimg.cn/00585a6ad3cf43c58830f5a79df744b4.png)
5.4 字节流循环读取
FileInputStream fis=new FileInputStream("a.txt");
int i;
while ((i=fis.read())!=-1){
System.out.println(i);
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bqfQ9A3K-1659543003411)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1476aeb434b1476aa33dd09b4b372496~tplv-k3u1fbpfcp-watermark.image?)]](https://img-blog.csdnimg.cn/274b9e34025c4a699f36f54d3e9cd887.png)
5.5 数组拷贝 读取-写出
FileInputStream fis=new FileInputStream("D:\learing\test.mp4");
FileOutputStream fos=new FileOutputStream("test2.mp4");
byte[] bys=new byte[1024];
int len;
while ((len=fis.read(bys))!=-1){
fos.write(bys,0,len);
}
fis.close();
fos.close();
5.6 根据数组的长度,决定一次读取多少字节,并把读取到数据存到数组中。
5.6.1
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2kvYRGDh-1659543003411)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d7039304b8b94cc4b83dd556e6b63647~tplv-k3u1fbpfcp-watermark.image?)]](https://img-blog.csdnimg.cn/0349d6d42ae345d6919856834425515e.png)
FileInputStream fis=new FileInputStream("a.txt");
byte[] bys=new byte[3];
int read = fis.read(bys);
System.out.println(read);
System.out.println(Arrays.toString(bys));
5.6.2
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nz3nTrvv-1659543003411)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/95814b5b066e4fb3b01fb88a272e3064~tplv-k3u1fbpfcp-watermark.image?)]](https://img-blog.csdnimg.cn/c567a60d6009452999db303bccc727c1.png)
FileInputStream fis=new FileInputStream("a.txt");
byte[] bys=new byte[3];
int len;//记录读取数据的位置
while ((len= fis.read(bys))!=-1){
String str=new String(bys,0,len);
System.out.println(str);
}
6、字符流
字符流=字节流+编码表
当我们调用read 方法 读取字符的时候
实际上,底层会先读取到(一个字节)
判断这个字节是否为负数(中文字符,字节的第一个,肯定是负数)
你:-74 -73 -72
第一次读取到的是-74,就可以判断,读取的内容是中文了
是中文的话,再结合平台默认编码表,决定继续读取多少字节
UTF-8,读取3个字节—>转换为中文的汉子
如果读取到的字节,是正数,就直接读取一个字节,然后转换。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v5F7f6P7-1659543003412)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3d565c27297640698dfb9acf53f54ebd~tplv-k3u1fbpfcp-watermark.image?)]](https://img-blog.csdnimg.cn/36e819537deb4946a3a0b29a4a2db7bd.png)
6.1 拷贝一个大文本文件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3AS0nMRp-1659543003412)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/23a1911a3aba4959ab0e5cd68095b133~tplv-k3u1fbpfcp-watermark.image?)]](https://img-blog.csdnimg.cn/74ee846872f34ad8a44308821d3fb531.png)
7、字节流和字符流的区别
7.1、创建的数组类型不一样
7.2 字节流写出的数据,就算没有关闭流,数据也会写出。字符流不会。
7.3 字符流写出数据可以直接写出字符串。
7.4 字符流只有调了close关闭流后,或者flush 才会把缓冲区刷出。
flush把数据从缓冲区刷到文件中后,还可以继续进行刷出。
但是close后,就不能再进行写出了。
以上内容,来自我稀土掘金博客。
链接: 稀土掘金
本文含有隐藏内容,请 开通VIP 后查看