`

BufferedOutputStream 源码分析

阅读更多
BufferedOutputStream实现了一个缓冲输出流。构建了这样一个输出流后,应用可以往底层流写数据而不用每次写一个字节都调用底层流的方法。

public class BufferedOutputStream extends FilterOutputStream {

	// 内部缓冲区,存储数据
	protected byte buf[];

	// 缓冲区中有效的字节数(0 ~ buf.length)
	protected int count;

	// 构造方法,创建一个新的输出缓冲流,并把数据写到指定的底层输出流
	public BufferedOutputStream(OutputStream out) {
		this(out, 8192);
	}

	// 构造方法,创建一个新的输出缓冲流,以将具有指定缓冲区大小的数据写到指定的底层输出流。
	public BufferedOutputStream(OutputStream out, int size) {
		super(out);
		if (size <= 0) {
			throw new IllegalArgumentException("Buffer size <= 0");
		}
		buf = new byte[size];
	}

	// 刷新内部的缓冲区,这会让内部缓冲区的有效字节被写出到此缓冲的输出流中
	private void flushBuffer() throws IOException {
		if (count > 0) {
			out.write(buf, 0, count);
			count = 0;
		}
	}

	// 将指定的字节写入此缓冲的输出流
	public synchronized void write(int b) throws IOException {
		// 如果缓冲区满,则刷新缓冲区
		if (count >= buf.length) {
			flushBuffer();
		}
		buf[count++] = (byte)b;
	}

	// 将指定字节数组中的从偏移量off开始len个字节写入此缓冲的输出流
	public synchronized void write(byte b[], int off, int len) throws IOException {
		if (len >= buf.length) {
			// 如果待写入的字节数大于或等于缓冲区大小,刷新缓冲区,并直接写入到输出流中
			flushBuffer();
			out.write(b, off, len);
			return;
		}
		if (len > buf.length - count) {
			flushBuffer();
		}
		System.arraycopy(b, off, buf, count, len);
		count += len;
	}

	// 刷新此缓冲区和输出流,这会使所有缓冲的输出字节被写出到底层输出流中
	// 为了让缓冲区的数据能被写入到底层输出流中,可以显式调用该方法。或者调用close()方法(父类FilterOutputStream的close()方法),在close方法里,调用该flush()方法
	public synchronized void flush() throws IOException {
		flushBuffer();
		out.flush();
	}
}
分享到:
评论

相关推荐

    BufferedOutputStream 介绍_动力节点Java学院整理

    BufferedOutputStream 是缓冲输出流。它继承于FilterOutputStream。 BufferedOutputStream 的作用是为另一个输出流提供“缓冲功能”。

    BufferedOutputStream.html

    java的BufferedOutputStream,开发过程中使用字符流,效率提高。字符流很好,初学者要分清字符流和字节流

    BufferedOutputStream的用法---马克-to-win java视频

    BufferedOutputStream的用法---马克-to-win java视频 缓存输出流

    Java中的BufferedInputStream与BufferedOutputStream使用示例

    BufferedInputStream和BufferedOutputStream分别继承于FilterInputStream和FilterOutputStream,代表着缓冲区的输入输出,这里我们就来看一下Java中的BufferedInputStream与BufferedOutputStream使用示例:

    jdk api-BufferedOutputStream基础、应用、实战

    jdk api-BufferedOutputStream基础、应用、实战

    java算法,实现压缩及解压缩

     BufferedOutputStream bos = new BufferedOutputStream(fos,BUFFER);  int count;  byte data[] = new byte[BUFFER];  while ((count = bis.read(data, 0, BUFFER)) != -1)  {  bos.write(data, 0, ...

    BufferedOutputStream与BufferedInputStream

    字节缓冲输出流: BufferedOutputStream (OutputStream out) public class BufferStreamDemo { public static void main(String[] args) throws IOException { //字节缓冲输出流: BufferedOutputStream ...

    Android实现下载zip压缩文件并解压的方法(附源码)

    其实在网上有很多介绍下载文件或者解压zip文件的文章,但是两者结合的不多,所以这篇文章在此记录一下下载zip文件并直接解压的方法,直接上代码,文末有源码下载。 下载: import java.io.BufferedInputStream; ...

    FastDFS上传下载多种API测速情况及代码。

    下载 download_file(group_name, remote_filename , downloadStream) 1073741824(约1G) 24352ms 44092 42.04940796 2K 1 fastDFS的DowloadStream,BufferedOutputStream 下载 download_file(group_name, remote_...

    java在文件尾部追加内容的简单实例

    下面小编就为大家带来一篇java在文件尾部追加内容的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    JavaIo流分析图

    分析Java常用IO流,包括InputStream、OutputStream、FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream、Reader、Writer、InputStreamReader、OutputStreamWriter、FileReader、...

    java中实现复制文件和文件夹

    BufferedOutputStream outBuff=new BufferedOutputStream(output); // 缓冲数组 byte[] b = new byte[1024 * 5]; int len; while ((len =inBuff.read(b)) != -1) { outBuff.write(b, 0, len); } //...

    java压缩文件源码--ZipUtils

    zos = new ZipOutputStream(new BufferedOutputStream(fos, BUFFER)); zos.setLevel(9); byte[] data = new byte [BUFFER]; for (int i = 0; i; i++){ // 设置压缩文件入口entry,为被...

    Java读存二进制大文件块

    摘要:Java源码,文件操作,读取文件,二进制 Java读存大块二进制资料文件,java.io 包中提供了BufferedInputStream 和BufferedOutputStream 类来缓存的读写流。但是读写大块的数据文件时,使用这两个类的效果并不是很好...

    批量打包下载

    BufferedOutputStream bouts = new BufferedOutputStream(outs); response.setContentType("application/x-download");// 设置response内容的类型 response.setHeader( "Content-disposition", "attachment...

    bytestreamdemo.zip

    java IO 字节流练习代码 FileInputStream和...BufferedInputStream 和 BufferedOutputStream DataInputStream 和 DataOutputStream ObjectInputStream和ObjectOutputStream PrintStream PushbackInputStream

    JAVA IO流缓冲字节流缓冲字符流等流经典代码示例加注释总结.rar

    FileWriter、FileReader、CharArrayReader、CharArrayWriter、CharSequence、OutputStreamWriter、...BufferedOutputStream、BufferedInputStream、PipedReader、PipedWriter、PipedInputStream、PipedOutputStream...

    java缓冲流、转换流、序列化流.docx

    缓冲流 缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,...BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("bos.txt"));

    JDATASTREAMDEMO_java_

    Java reads and stores large binary data files. The java.io package provides BufferedInputStream and BufferedOutputStream classes to buffer read and write streams

    下载代码

    bos = new BufferedOutputStream(new FileOutputStream(file));; int num = -1; byte[] buffer = new byte[1024]; while (true) { num = bis.read(buffer); if (num == -1) { bos....

Global site tag (gtag.js) - Google Analytics