• IO流


    流分类:

    • 流向:输入流和输出流
    • 数据:字节流和字符流

    字符流和字节流和文件:

    • 字节流:可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的,包括二进制、音频、视频、doc等
      输入流:InputStream FileInputStream
      输出流:OutputStream FileOutputStream
    		FileInputStream fis = new FileInputStream("aaa.mp3");	//创建输入流对象,关联aaa.mp3
    		FileOutputStream fos = new FileOutputStream("bbb.mp3");//创建输出流对象,关联bbb.mp3,如果没有bbb.txt,会创建出一个
    		
    		int b;
    		while((b = fis.read()) != -1) { //没读到内容时返回-1
    			fos.write(b);
    		}
    		
    		fis.close();
    		fos.close();
    
    
    		FileInputStream fis = new FileInputStream("xxx.mp3");
    		FileOutputStream fos = new FileOutputStream("copy.mp3");
    		byte[] arr = new byte[fis.available()];					//根据文件大小做一个字节数组
    		fis.read(arr);											//将文件上的所有字节读取到数组中
    		fos.write(arr);											//将数组中的所有字节一次写到了文件上
    		fis.close();
    		fos.close();
    
    
    
    		FileInputStream fis = new FileInputStream("xxx.mp3");
    		FileOutputStream fos = new FileOutputStream("copy.mp3");
    		int len;
    		byte[] arr = new byte[1024 * 8];					//自定义字节数组
    		 
    		while((len = fis.read(arr)) != -1) {
    			//fos.write(arr);
    			fos.write(arr, 0, len);							//写出字节数组写出有效个字节个数
    		}
    		
    		fis.close();
    		fos.close();
    
    • 字符流:只能处理纯文本,全部为可见字符,txt、html
      输入流:Reader FileReader
      输出流:Writer FileWriter
    //字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出.
    //FileReader类的read()方法可以按照字符大小读取
    //FileWriter类的write()方法可以自动把字符转为字节写出
    		FileReader fr = new FileReader("a.txt");
    		FileWriter fw = new FileWriter("b.txt");
    		
    		int ch;
    		while((ch = fr.read()) != -1) {
    			fw.write(ch);
    		}
    		
    		fr.close();
    		fw.close();
    
    		FileReader fr = new FileReader("aaa.txt");			//创建字符输入流,关联aaa.txt
    		FileWriter fw = new FileWriter("bbb.txt");			//创建字符输出流,关联bbb.txt
    		
    		int len;
    		char[] arr = new char[1024*8];						//创建字符数组
    		while((len = fr.read(arr)) != -1) {					//将数据读到字符数组中
    			fw.write(arr, 0, len);							//从字符数组将数据写到文件上
    		}
    		
    		fr.close();											//关流释放资源
    		fw.close();	
    

    操作:

    1)建立联系 File对象
    2)选择流
    3)操作 数组大小+read、write
    4)释放资源

    处理流:

    增强功能,提高性能,节点流之上
    一、缓冲流
    1)字节缓冲流
    BufferedInputStream BufferedOutputStream

    
    		FileInputStream fis = new FileInputStream("aaa.mp3");			//创建文件输入流对象,关联aaa.mp3
    		BufferedInputStream bis = new BufferedInputStream(fis);			//创建缓冲区对fis装饰
    		FileOutputStream fos = new FileOutputStream("copy.mp3");		//创建输出流对象,关联copy.mp3
    		BufferedOutputStream bos = new BufferedOutputStream(fos);		//创建缓冲区对fos装饰
    		
    		int b;
    		while((b = bis.read()) != -1) {		
    			bos.write(b);
    		}
    		
    		bis.close();						//只关装饰后的对象即可
    		bos.close();
    

    2)字符缓冲流
    BufferedReader BufferedWriter

    //BufferedReader的read()方法读取字符时会一次读取若干字符到缓冲区, 然后逐个返回给程序, 降低读取文件的次数, 提高效率
    //BufferedWriter的write()方法写出字符时会先写到缓冲区, 缓冲区写满时才会写到文件, 降低写文件的次数, 提高效率
    
    		BufferedReader br = new BufferedReader(new FileReader("aaa.txt"));	//创建字符输入流对象,关联aaa.txt
    		BufferedWriter bw = new BufferedWriter(new FileWriter("bbb.txt"));	//创建字符输出流对象,关联bbb.txt
    		
    		int ch;				
    		while((ch = br.read()) != -1) {		//read一次,会先将缓冲区读满,从缓冲区中一个一个的返给临时变量ch
    			bw.write(ch);					//write一次,是将数据装到字符数组,装满后再一起写出去
    		}
    		
    		br.close();							//关流
    		bw.close();  
    
    // BufferedReader的readLine()方法可以读取一行字符(不包含换行符号)
    // BufferedWriter的newLine()可以输出一个跨平台的换行符号"
    "
    
    		BufferedReader br = new BufferedReader(new FileReader("aaa.txt"));
    		BufferedWriter bw = new BufferedWriter(new FileWriter("bbb.txt"));
    		String line;
    		while((line = br.readLine()) != null) {
    			bw.write(line);
    			//bw.write("
    ");					//只支持windows系统
    			bw.newLine();						//跨平台的
    		}
    		
    		br.close();
    		bw.close(); 
    

    二、转换流:字节流转字符流,处理乱码

    //FileReader是使用默认码表读取文件, 如果需要使用指定码表读取, 那么可以使用InputStreamReader(字节流,编码表)
    //FileWriter是使用默认码表写出文件, 如果需要使用指定码表写出, 那么可以使用OutputStreamWriter(字节流,编码表)
    
    		BufferedReader br = 									//高效的用指定的编码表读
    				new BufferedReader(new InputStreamReader(new FileInputStream("UTF-8.txt"), "UTF-8"));
    		BufferedWriter bw = 									//高效的用指定的编码表写
    				new BufferedWriter(new OutputStreamWriter(new FileOutputStream("GBK.txt"), "GBK"));
    		int ch;
    		while((ch = br.read()) != -1) {
    			bw.write(ch);
    		}
    		
    		br.close();
    		bw.close();
    

    IO流(flush和close方法的区别)

    • flush()方法
      • 用来刷新缓冲区的,刷新后可以再次写出
    • close()方法
      • 用来关闭流释放资源的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写
  • 相关阅读:
    树形结构基础
    最长公共子序列
    四 过滤模式 map Only
    三 概要模式 2) MR倒排索引、性能分析、搜索干扰词。
    三 概要模式 1)数值概要 (单词计数记录计数最大值/最小值/计数平均值、中位数、标准差)
    一 梳理 从 HDFS 到 MR。
    个人学习源码的 HBase误区的总结 与 架构图
    15 hbase 学习(十五)缓存机制以及可以利用SSD作为存储的BucketCache
    13 hbase源码系列(十三)缓存机制MemStore与Block Cache
    HBase 系统架构
  • 原文地址:https://www.cnblogs.com/StephenChenin/p/9141798.html
Copyright © 2020-2023  润新知