【IO】BufferedOutputStream 梦里梦外; 2022-05-31 08:15 105阅读 0赞 # 前言 # Github:[https://github.com/yihonglei/jdk-source-code-reading][https_github.com_yihonglei_jdk-source-code-reading](java-io) # 一 BufferedOutputStream 概述 # BufferedOutputStream是一个缓冲输出流,通过建立这样一个缓冲输出流, 应用程序可以将字节写入底层输出流,而不必为每一个字节编写一个对底层系统的调用,能够提高文件的写入效率。 # 二 BufferedOutputStream 构造器和方法分析 # **主要字段** protected byte\[\] buf; // 提供内部缓冲区存储数据。 protected int count; // 缓冲器中有效字节数。 **构造器** **public BufferedOutputStream(OutputStream out);** 接受一个输出流作为参数,创建一个新的缓冲输出流,将数据写入指定的底层输出流。 **public BufferedOutputStream(OutputStream out, int size);** 接受一输出流和缓冲区大小作为参数,创建一个新的缓冲输出流,用指定的缓冲区大小将数据写入指定的底层输出流 **重要方法** **public void flush() throws IOException;** 刷新缓冲输出流。强制将缓冲输出字节写入到底层输出流中。 **public void write(int b) throws IOException;** 将指定字节写入此缓冲输出流。 **public void write(byte\[\] b, int off, int len) throws IOException;** 从指定的字节数组中从偏移量开始,将该字节写入缓冲输出流。通常,该方法将给定数组中的字节存储到该流的缓冲区中, 根据需要将缓冲区刷新到底层输出流。但是,如果请求的长度至少与此流的缓冲区一样大,则此方法将刷新缓冲区并将字节直接写入底层输出流。 因此bufferedoutputstream不会复制不必要的数据冗余。 # 三 BufferedOutputStream 实例 # package com.jpeony.io.outputstream; import java.io.*; /** * @author yihonglei */ public class BufferedOutputStreamSimple { public static void main(String[] args) { // 指定构建文件 File file = new File("C:\\mycode\\hello.txt"); /* * 创建缓冲输出流,new FileOutputStream(File file, String mode), * mode为true,写入追加到文件,否则,不追加. */ try (FileOutputStream os = new FileOutputStream(file, true); BufferedOutputStream bos = new BufferedOutputStream(os)) { // 要写入的数据 String str = "test-BufferedOutputStream"; byte[] data = str.getBytes(); // 写入到缓冲输出流 bos.write(data); } catch (IOException e) { e.printStackTrace(); } } } **基于 buffered 进行文件复制实例** package com.jpeony.io.copy; import java.io.*; /** * 基于Buffered进行文件复制: * 从源文件读取--》写入到目标文件 * * @author yihonglei */ public class BufferedBasicCopySimple { public static void main(String[] args) { // 源文件 File oldFile = new File("C:\\mycode\\hello.txt"); // 目标文件 File newFile = new File("C:\\mycode\\hello-copy.txt"); try (InputStream is = new FileInputStream(oldFile); OutputStream os = new FileOutputStream(newFile); BufferedInputStream bis = new BufferedInputStream(is); BufferedOutputStream bos = new BufferedOutputStream(os)) { /* 从源文件读取数据: 代表一次最多读取1KB的内容 */ byte[] readData = new byte[1024]; /* 代表实际读取的字节数,如果返回-1,说明已经读完了 */ int length = 0; while ((length = bis.read(readData)) != -1) { /* 将数据写入目标文件:length 代表实际读取的字节数 */ bos.write(readData, 0, length); } /* 缓冲区的内容写入到文件 */ bos.flush(); } catch (IOException e) { e.printStackTrace(); } } } 关于[BufferedInputStream][] [https_github.com_yihonglei_jdk-source-code-reading]: https://github.com/yihonglei/jdk-source-code-reading [BufferedInputStream]: http://blog.csdn.net/yhl_jxy/article/details/79318713
还没有评论,来说两句吧...