1、流的概念
1.一、
程序中全部的数据都是以流的方式进行传输或保存的1.2
、程序须要读取数据的时候要使用输入流读取数据,而当程序须要将一些数据保存(写)到磁盘的时候,就要使用输出流完成。1.3
、切记:程序是内,文件...是外2、流的超类
2.1
、字节流的超类:InputStream、OutputStream
ios
2.二、
字符流的超类: Reader、Writer
数组
2.三、
用途推荐函数
2.四、
前言:其实前言放在这里,笔者认为是不合适的,以前的铺垫只是方便读者快读进入状态学习
字符流的诞生:字符流按虚拟机的encode处理,也就是经过InputStreamReader,OutputStreamWriter
进行字符集的转化优化
转化(注:初学者能够不看该转化知识,若是想了解原理,该段是有帮助的):编码
InputStreamReader
:用于将一个字节流中的字节解码成字符,其构造函数InputStreamReader isr = new InputStreamReader(InputStream in)
的参数是一个InputStream对象,用 对象.read(char[] data),的方式获取内容OutputStreamWriter
:用于将写入的字符编码成字节后写入一个字节流,其构造函数OutputStreamWriter osw = new OutputStreamWriter(OutputStream out)
是一个OutputStream对象,一般用对象.write(String str)的方式写到 对象绑定的输出流上。3、字节流与字符流的区别
3.一、
操做文件时的区别:code
3.二、
存在形式区别:视频
4、分析与优化
分析:对象
优化图片
/*(1)对于视频、图片等文件的加缓冲优化*/ byte[] fileToByteArray (String filePath){ File des = new File(filePath); FileInputStream fis = new FileInputStream(des); ByteArrayOutputStream bios = new ByteArrayOutputStream(); byte[] datas = new byte[1024]; //缓冲容器:提升效率` int len = -1; while ((len = fis.read(datas)) != -1){ bios.write(datas, 0, len); //把字节数组datas的内容 写入到 字节数组输出流 中--分段写入 } bios.flush(); //强制将缓冲区中的数据写入输出流,并清空缓冲区 return bios.toByteArray(); } /*(2)对于纯文本文件的加缓冲优化:*/ //BufferedReader,内部其实维护一个缓冲字符数组 String tempStr = ""; try (FileReader fr = new FileReader("a.txt"); FileWriter fw = new FileWriter("b.txt"); BufferedWriter bw = new BufferedWriter(fw); BufferedReader br = new BufferedReader(fr)){ //包装: while ((tempStr = br.readLine()) != null){ //将读取的"一行"字符串写入文件中 bw.write(tempStr); //写入下一行的时候,先换行 bw.newLine(); } } catch (IOException e){ e.printStackTrace(); }
附:笔者并无把规范的代码展现出来,只是把与本文相关的核心代码展现给了你们你们有兴趣能够自行补充。内容其实很少,加多几个try,catch语句便可! 喜欢做者的文章但愿能够被您采纳,咱们一块儿学习,共同进步!