Java——IO流
认识IO流
I指input,称为输入流:负责把数据读到程序内存中去
O指Onput,称为输出流:负责写数据输出到网络||磁盘
IO流的分类
按照流的方向,IO流分为:输入流和输出流
按照流的内容,IO流分为:
- 字节流:适合操作所有类型的文件。比如,音频,视频,图片,文本文件的复制转移等等。
- 字符流:只适合操作纯文本文件。比如:读写txt,java文件等等。
IO流的体系
字节输入流InputStream,字节输出流OnputStream,字符输入流Reader,字符输出流Writer。都属于抽象类。
对应的实现类
输入:从磁盘||网络输入到内存中
输出:从内存输出到磁盘||网络中
FileInputStream文件字节输入流
作用:
以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去。
new FileInputStream
创建字节输入流管道与源文件接通。
,read()
每次读取一个字节返回,如果没有数据可读返回-1
UTF-8中汉字三个字节一起读取,.read()每次读取一个字节会截断汉字的读取从而产生乱码。
new byte[3]
创建一个长度为3的字节数组对象,这意味着这个数组可以存储3个 byte
类型的元素。
.read(b)
每次用一个字节数组读取数据,返回字节数组读取了多少个字节数,如果发现没有数据可读会返回-1。
new String(b);
将b转换为字符串形式
源文件数据
new String(b,0,len);
若是以这样的源文件
就会乱码,因为3个字节为一桶水,截断了汉字,依然无法避免读取汉字输出乱码的问题。
使用字节流读取中文,如何保证输出不乱码,怎样解决?
定义一个与源文件一样大的字节数组,一次性读取完文件的全部字节。
这样做是否存在问题?
如果文件过大,创建的字节数组也会过大,可能引起内存溢出。
.readAllBytes();
点击readAllBytes()查看源码
所以读取文本适合用字符流,字节流适合做数据的转移,比如:文件的复制
后续内容持续更新
原文地址:https://blog.csdn.net/2303_79136949/article/details/145135973
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!