(四)BufferedOutputStream源码学习
来源:互联网 发布:一次性餐具的危害数据 编辑:程序博客网 时间:2024/05/22 16:29
- BufferedOutputStream源码比较简单,利用一个字节数组作为缓存区,当缓存区存满或者调用flush()函数时,才会将数据写入到底层输出流中。
- write(buffer)函数中做了优化,当一次性输入的字节数组超过缓存区时,直接写入底层输出流
package java.io;public class BufferedOutputStream extends FilterOutputStream { /** * The internal buffer where data is stored. */ protected byte buf[]; /** * The number of valid bytes in the buffer. This value is always * in the range <tt>0</tt> through <tt>buf.length</tt>; elements * <tt>buf[0]</tt> through <tt>buf[count-1]</tt> contain valid * byte data. */ protected int count; /** * Creates a new buffered output stream to write data to the * specified underlying output stream. * * @param out the underlying output stream. */ public BufferedOutputStream(OutputStream out) { this(out, 8192); } /** * Creates a new buffered output stream to write data to the * specified underlying output stream with the specified buffer * size. * * @param out the underlying output stream. * @param size the buffer size. * @exception IllegalArgumentException if size <= 0. */ public BufferedOutputStream(OutputStream out, int size) { super(out); if (size <= 0) { throw new IllegalArgumentException("Buffer size <= 0"); } buf = new byte[size]; } /** Flush the internal buffer */ private void flushBuffer() throws IOException { if (count > 0) { out.write(buf, 0, count); count = 0; } } /** * Writes the specified byte to this buffered output stream. * * @param b the byte to be written. * @exception IOException if an I/O error occurs. */ public synchronized void write(int b) throws IOException { if (count >= buf.length) { flushBuffer(); } buf[count++] = (byte)b; } /** * Writes <code>len</code> bytes from the specified byte array * starting at offset <code>off</code> to this buffered output stream. * * <p> Ordinarily this method stores bytes from the given array into this * stream's buffer, flushing the buffer to the underlying output stream as * needed. If the requested length is at least as large as this stream's * buffer, however, then this method will flush the buffer and write the * bytes directly to the underlying output stream. Thus redundant * <code>BufferedOutputStream</code>s will not copy data unnecessarily. * * @param b the data. * @param off the start offset in the data. * @param len the number of bytes to write. * @exception IOException if an I/O error occurs. */ public synchronized void write(byte b[], int off, int len) throws IOException { if (len >= buf.length) { /* If the request length exceeds the size of the output buffer, flush the output buffer and then write the data directly. In this way buffered streams will cascade harmlessly. */ flushBuffer(); out.write(b, off, len); return; } if (len > buf.length - count) { flushBuffer(); } System.arraycopy(b, off, buf, count, len); count += len; } /** * Flushes this buffered output stream. This forces any buffered * output bytes to be written out to the underlying output stream. * * @exception IOException if an I/O error occurs. * @see java.io.FilterOutputStream#out */ public synchronized void flush() throws IOException { flushBuffer(); out.flush(); }}
阅读全文
0 0
- (四)BufferedOutputStream源码学习
- BufferedOutputStream 源码分析
- BufferedOutputStream 源码分析
- BufferedOutputStream的缓存功能解析(源码阅读)
- Atlas源码学习(四)
- SpringSecuirty源码学习(四)
- nginx源码学习(四)
- [Java]BufferedOutputStream、DataInputStream源码分析
- BufferedOutputStream 源码的个人理解
- BufferedOutputStream
- BufferedOutputStream
- Hadoop HDFS源码学习笔记(四)
- tomcat源码分析学习笔记(四)
- caffe源码学习(四) layer
- jQueyr源码分析学习笔记(四)
- Spring源码学习--XmlWebApplicationContext(四)
- 比特币源码学习笔记(四)
- libevent源码学习(四)定时器Timer
- 第五章
- Zynq-Linux移植学习笔记之11-qspi驱动配置与测试接口
- linux 配置mailx发送到外网邮箱
- mysql数据库备份还原
- jquery和bootstrap
- (四)BufferedOutputStream源码学习
- 工厂方法模式
- 第六篇
- flume学习(五):Flume Channel Selectors使用
- CentOS 7.0+hadoop 2.7搭建集群
- 安装sass
- 交叉编译
- linux 点命令
- 蓝桥杯 算法训练 和为T