
hudson.util.ByteBuffer Maven / Gradle / Ivy
Show all versions of hudson-core Show documentation
/*******************************************************************************
*
* Copyright (c) 2004-2009 Oracle Corporation.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*
* Kohsuke Kawaguchi
*
*
*******************************************************************************/
package hudson.util;
import java.io.OutputStream;
import java.io.IOException;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
/**
* {@link ByteArrayOutputStream} re-implementation.
*
*
* This version allows one to read while writing is in progress.
*
* @author Kohsuke Kawaguchi
* @deprecated since 2008-05-28. Moved to stapler
*/
public class ByteBuffer extends OutputStream {
private byte[] buf = new byte[8192];
/**
* Size of the data.
*/
private int size = 0;
public synchronized void write(byte b[], int off, int len) throws IOException {
ensureCapacity(len);
System.arraycopy(b,off,buf,size,len);
size+=len;
}
public synchronized void write(int b) throws IOException {
ensureCapacity(1);
buf[size++] = (byte)b;
}
public synchronized long length() {
return size;
}
private void ensureCapacity(int len) {
if(buf.length-size>len)
return;
byte[] n = new byte[Math.max(buf.length*2, size+len)];
System.arraycopy(buf,0,n,0,size);
this.buf = n;
}
public synchronized String toString() {
return new String(buf,0,size);
}
/**
* Writes the contents of this buffer to another OutputStream.
*/
public synchronized void writeTo(OutputStream os) throws IOException {
os.write(buf,0,size);
}
/**
* Creates an {@link InputStream} that reads from the underlying buffer.
*/
public InputStream newInputStream() {
return new InputStream() {
private int pos = 0;
public int read() throws IOException {
synchronized(ByteBuffer.this) {
if(pos>=size) return -1;
return buf[pos++];
}
}
public int read(byte b[], int off, int len) throws IOException {
synchronized(ByteBuffer.this) {
if(size==pos)
return -1;
int sz = Math.min(len,size-pos);
System.arraycopy(buf,pos,b,off,sz);
pos+=sz;
return sz;
}
}
public int available() throws IOException {
synchronized(ByteBuffer.this) {
return size-pos;
}
}
public long skip(long n) throws IOException {
synchronized(ByteBuffer.this) {
int diff = (int) Math.min(n,size-pos);
pos+=diff;
return diff;
}
}
};
}
}