/** Copyright (c) 1994, 2015, Oracle and/or its affiliates. All rights reserved.* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.** This code is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public License version 2 only, as* published by the Free Software Foundation. Oracle designates this* particular file as subject to the "Classpath" exception as provided* by Oracle in the LICENSE file that accompanied this code.** This code is distributed in the hope that it will be useful, but WITHOUT* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License* version 2 for more details (a copy is included in the LICENSE file that* accompanied this code).** You should have received a copy of the GNU General Public License version* 2 along with this work; if not, write to the Free Software Foundation,* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.** Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA* or visit www.oracle.com if you need additional information or have any* questions.*/package java.io;/*** The class implements a buffered output stream. By setting up such* an output stream, an application can write bytes to the underlying* output stream without necessarily causing a call to the underlying* system for each byte written.** @author Arthur van Hoff* @since 1.0*/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 {@code 0} through {@code buf.length}; elements* {@code buf[0]} through {@code buf[count-1]} 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.*/@Overridepublic 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.*/@Overridepublic 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*/@Overridepublic synchronized void flush() throws IOException {flushBuffer();out.flush();}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。