You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by ra...@apache.org on 2005/04/03 13:30:01 UTC

cvs commit: xml-security/src/org/apache/xml/security/utils UnsyncBufferedOutputStream.java

raul        2005/04/03 04:30:01

  Added:       src/org/apache/xml/security/utils
                        UnsyncBufferedOutputStream.java
  Log:
  First version
  
  Revision  Changes    Path
  1.1                  xml-security/src/org/apache/xml/security/utils/UnsyncBufferedOutputStream.java
  
  Index: UnsyncBufferedOutputStream.java
  ===================================================================
  package org.apache.xml.security.utils;
  
  import java.io.IOException;
  import java.io.OutputStream;
  
  /**
   * A class that buffers writte without synchronize its methods
   * @author raul
   *
   */
  public class UnsyncBufferedOutputStream extends OutputStream {
  	final OutputStream out;
  	static final int size=8*1024;
  	final byte[] buf=new byte[size];
  	int pointer=0;
  	/**
  	 * Creates a buffered output stream without synchronization
  	 * @param out the outputstream to buffer
  	 */
  	public UnsyncBufferedOutputStream(OutputStream out) {
  		this.out=out;
  	}
  	
  	/** @inheritDoc */
  	public void write(byte[] arg0) throws IOException {
  		write(arg0,0,arg0.length);
  	}
  	
  	/** @inheritDoc */
  	public void write(byte[] arg0, int arg1, int len) throws IOException {
  		final int newLen=pointer+len;
  		if (newLen> size) {
  			flushBuffer();		
  			if (len>size) {
  				out.write(arg0,arg1,len);
  				return;
  			}
  		}
  		System.arraycopy(arg0,arg1,buf,pointer,len);
  		pointer=newLen;
  	}
  	
  	private final void flushBuffer() throws IOException {
  		if (pointer>0)
  			out.write(buf,0,pointer);
  		pointer=0;
  		
  	}
  	
  	/** @inheritDoc */
  	public void write(int arg0) throws IOException {		
  		if (pointer>= size) {
  			flushBuffer();
  		}
  		buf[pointer++]=(byte)arg0;
  
  	}
  	
  	/** @inheritDoc */	
  	public void flush() throws IOException {
  		flushBuffer();
  		out.flush();
  	}
  
  	/** @inheritDoc */
  	public void close() throws IOException {
  		flush();		
  	}
  
  }