package com.idega.io;
/**
* A utility class to use for temporary buffering and connecting streams in memory.
*
* @author <a href="mailto:tryggvi@idega.is">Tryggvi Larusson</a>
* @version 1.0
*/
public class MemoryFileBuffer {
byte[] buffer = new byte[0];
private String mimeType;
protected synchronized void write(byte[] myByteArray) {
byte[] newArray = new byte[this.buffer.length + myByteArray.length];
System.arraycopy(this.buffer, 0, newArray, 0, this.buffer.length);
System.arraycopy(myByteArray, 0, newArray, this.buffer.length,
myByteArray.length);
this.buffer = newArray;
}
protected synchronized byte read(int position) {
try {
return this.buffer[position];
} catch (ArrayIndexOutOfBoundsException e) {
return (byte) -1;
}
}
/*
* protected synchronized byte[] read(int position,int lengthOfArray){
*
* byte[] newArray = new byte[lengthOfArray];
*
* System.arraycopy(buffer,position,newArray,0,lengthOfArray);
*
* return newArray;
* }
*/
protected synchronized int read(byte[] buffer, int position) {
System.arraycopy(this.buffer, position, buffer, 0, buffer.length);
return 1;
}
protected synchronized int read(byte[] b, int off, int len) {
//try{
int bufferlength = this.buffer.length;
int remaining = bufferlength - off;
int numberCopied = 0;
if (remaining < len) {
numberCopied = remaining;
} else {
numberCopied = len;
}
System.arraycopy(this.buffer, off, b, 0, numberCopied);
return numberCopied;
//}
//catch(RuntimeException e){
// return -1;
//}
}
/*
* protected synchronized void write(byte[] b){
*
* byte[] newArray = new byte[buffer.length+b.length];
*
* System.arraycopy(buffer,0,newArray,0,buffer.length);
*
* System.arraycopy(myByteArray,0,newArray,buffer.length,b.length);
*
* buffer=newArray;
* }
*/
protected synchronized void write(byte[] b, int off, int len) {
byte[] newArray = new byte[this.buffer.length + len];
System.arraycopy(this.buffer, 0, newArray, 0, this.buffer.length);
System.arraycopy(b, 0, newArray, this.buffer.length, len);
this.buffer = newArray;
}
/*
* protected synchronized void write(int b){
*
* byte[] newArray = new byte[1];
*
* newArray[0]=(byte)b;
*
* System.arraycopy(buffer,0,newArray,0,buffer.length);
*
* System.arraycopy(myByteArray,0,newArray,buffer.length,myByteArray.length);
*
* buffer=newArray;
* }
*/
public void setMimeType(String type) {
this.mimeType = type;
}
public String getMimeType() {
return this.mimeType;
}
/**
*
* The length of the Buffer in bytes
*
*/
public int length() {
return this.buffer.length;
}
public byte[] buffer() {
return this.buffer;
}
}