zoukankan      html  css  js  c++  java
  • IO_BufferedInputStream&BufferedOutputStream

    BufferedInputStream和BufferedOutputStream这两个类分别是FilterInputStream和FilterOutputStream的子类,作为装饰器子类,使用它们可以防止每次读取/发送数据时进行实际的写操作,代表着使用缓冲区.
    不带缓冲的操作,每读一个字节就要写入一个字节,由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流效率很低。带缓冲的流,可以一次读很多字节,但不向磁盘中写入,只是先放到内存里。等凑够了缓冲区大小的时候一次性写入磁盘,这种方式可以减少磁盘操作次数,速度就会提高.
    BufferedOutputStream要调用flush()方法或close()方法,强行将缓冲区中的数据写出。否则可能无法写出数据。之后的BufferedReader和BufferedWriter与此类似。
    BufferedInputStream 是缓冲输入流。它继承于FilterInputStream
    BufferedInputStream 的作用是为另一个输入流添加一些功能,例如,提供“缓冲功能”以及支持mark()标记和reset()重置方法
    BufferedInputStream 本质上是通过一个内部缓冲区数组实现的

    public class BufferedInputStreamJava {
    
    	public static void main(String[] args) throws Exception {
    		// TODO Auto-generated method stub
    		String strFile = "d:" + File.separator + "javatest" + File.separator + "IO_RandomAccessFileTest.txt";
    		File f = new File(strFile);
    		FileInputStream fis = new FileInputStream(f);
    		BufferedInputStream bis = new BufferedInputStream(fis);
    		byte[] b = new byte[1024];
    		//注意:这里定义了result,用于返回读取到的字节个数
    		//在使用读到的字节数组的时候,如果没有result组装成String类输出的时候会有乱码
    		//这个时候组装的是缓存的byte数组,而这个数组最后的时候往往没有读满
    		int result = 0;
    		while((result = bis.read(b)) != -1) {
    			System.out.println(new String(b, 0, result));
    			//new String(b) 这里会正确输出读到的数据,但是后面有大量乱码符号
    		}
    		bis.close();
    		fis.close();
    	}
    }
    
    public class BUfferedOutputStream {
    
    	public static void main(String[] args) throws Exception {
    		// TODO Auto-generated method stub
    		String strFile = "d:" + File.separator + "javatest" + File.separator + "IO_RandomAccessFileTest.txt";
    		File f = new File(strFile);
    		//true代表续写到文件尾
    		FileOutputStream fos = new FileOutputStream(f, true);
    		BufferedOutputStream bos = new BufferedOutputStream(fos);
    		// 
    换行
    		byte[] StrB1 = "写入数据1...
    ".getBytes();
    		bos.write(StrB1);
    		bos.flush();
    		byte[] StrB2 = "写入数据2...".getBytes();
    		bos.write(StrB2);
    		//bos.close()没有关闭或者flush()的话,数据只会到缓冲区,不会到文件中
    		bos.close();
    		fos.close();
    	}
    
    }
    
  • 相关阅读:
    转:SkipList跳表
    git操作
    JAVA小工具打包
    Java数字证书操作
    mysql创建数据库和用户
    解决node-sass安装不了的问题
    vscode + angular
    ng2 quickstart-primeng
    ng2 quickstart
    使用淘宝的npm代理下载模块
  • 原文地址:https://www.cnblogs.com/changzuidaerguai/p/9277467.html
Copyright © 2011-2022 走看看