Mega Code Archive

 
Categories / Java / File Input Output
 

Fast BufferedOutputStream

/*  * @(#)$Id$  *  * Copyright 2006-2008 Makoto YUI  *  * Licensed under the Apache License, Version 2.0 (the "License");  * you may not use this file except in compliance with the License.  * You may obtain a copy of the License at  *  *     http://www.apache.org/licenses/LICENSE-2.0  *  * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License.  *   * Contributors:  *     Makoto YUI - initial implementation  */ //package xbird.util.io; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; /**  *   * <DIV lang="en"></DIV>  * <DIV lang="ja"></DIV>  *   * @author Makoto YUI (yuin405+xbird@gmail.com)  */ public final class FastBufferedOutputStream extends FilterOutputStream {     private byte buf[];     private int count;     public FastBufferedOutputStream(OutputStream out) {         this(out, 8192);     }     public FastBufferedOutputStream(OutputStream out, int size) {         super(out);         if(size <= 0) {             throw new IllegalArgumentException("Buffer size <= 0");         }         buf = new byte[size];     }     @Override     public void write(int b) throws IOException {         if(count >= buf.length) {             flushBuffer();         }         buf[count++] = (byte) b;     }     @Override     public 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;     }     @Override     public synchronized void flush() throws IOException {         flushBuffer();         out.flush();     }     private void flushBuffer() throws IOException {         if(count > 0) {             out.write(buf, 0, count);             count = 0;         }     } }