com.ejie.r01f.io.filters
Class CircularCharBuffer

java.lang.Object
  extended bycom.ejie.r01f.io.filters.CircularCharBuffer
All Implemented Interfaces:
java.lang.CharSequence

public class CircularCharBuffer
extends java.lang.Object
implements java.lang.CharSequence

Buffer circular de caracteres VER: http://ostermiller.org/utils/ El buffer circular adicionalmente implementa el interfaz CharSequence, de forma que puede ser utilizado en el computo de expresiones regulares. Cuando el buffer circular se "visualiza" como CharSequence, se ve como una cadena en la que la posición de lectura es el caracter 0 y la posición de escritura corresponde al tamaño de la cadena


Field Summary
static int INFINITE_SIZE
          Buffer infinito: el tamaño crece a medida que se añaden contenidos
 
Constructor Summary
CircularCharBuffer()
          Crea un buffer circular con la capacidad por defecto La escritura cuando el buffer está lleno bloqueará la ejecución hasta que se libere espacio (no se lanza una IOException)
CircularCharBuffer(boolean newBlockingWrite)
          Crea un nuevo buffer con una capacidad por defecto y el comportamiento especificado cuando se llena el buffer.
CircularCharBuffer(int newSize)
          Crea un nuevo buffer con la capacidad indicada La escritura cuando el buffer está lleno bloqueará la ejecución hasta que se libere espacio (no se lanza una IOException) NOTA: - El buffer puede reservar algunos caracteres para propósitos internos de forma que no toda la capacidad está disponible para la escritura - Si el buffer es de tamaño infinito (INFINITE_SIZE), su tamaño crecerá automáticamente y no se bloqueará o lanzará excepciones pero puede desbordar la memoria
CircularCharBuffer(int newSize, boolean newBlockingWrite)
          Crea un nuevo buffer con una capacidad dada y el comportamiento especificado cuando se llena el buffer.
 
Method Summary
 char charAt(int index)
          Devuelve el caracter situado en la posición indicada.
 void clear()
          Limpia el contenido del buffer y los streams (Reader/Writer) asociados al buffer se reabren si habían sido cerrados
 int getAvailable()
          Devuelve el número de caracteres disponibles para ser leidos NOTA: El número de caracteres disponibles mas el número de caracteres libres pueden no sumar el tamaño del buffer ya que se reserva espacio para uso interno.
 BufferEventListener getEventListener()
          Devuelve el eventListener a los eventos del buffer
 int getPositionFromLineal(int linealPosition)
          Devuelve la posición del array a partir del índice de lectura
 java.io.Reader getReader()
          Obtiene un Reader que puede ser utilizado para vaciar el buffer El Reader soporta "marcado" a consta de disminuir el tamaño del buffer (no se "machacan" los caracteres "reservados")
 int getSize()
          Devuelve la capacidad del buffer NOTA: El número de caracteres disponibles mas el número de caracteres libres pueden no sumar el tamaño del buffer ya que se reserva espacio para uso interno.
 int getSpaceLeft()
          Devuelve el número de caracteres que pueden ser escritos en el buffer NOTA: El número de caracteres disponibles mas el número de caracteres libres pueden no sumar el tamaño del buffer ya que se reserva espacio para uso interno.
 java.io.Writer getWriter()
          Obtiene un Writer que puede ser utilizado para llenar el buffer Una operacion de escritura puede lanzar un BufferOverflowException si el buffer NO es lo suficientemente grande.
 boolean isEmpty()
          Devuelve true si el buffer está vacío (no hay caracteres disponibles para ser leidos)
 boolean isFull()
          Devuelve true si el buffer está lleno (no hay espacio para escribir)
 int length()
          Devuelve el número de caracteres en el buffer circular
static void main(java.lang.String[] args)
          Test para probar el temilla...
 void setEventListener(BufferEventListener theEventListener)
          Establece el eventListener a los eventos del buffer
 java.lang.CharSequence subSequence(int start, int end)
          Devuelve una subsecuencia del buffer circular NOTA: Cuando el buffer circular se ve como un CharSequence, la posición de lectura corresponde a la posición 0
 java.lang.String toString()
          Devuelve el buffer circular completo como string comenzando por la posición indicada por readPosition
 java.lang.String toString(boolean onlyReadAvaliable)
          Devuelve el buffer circular como string comenzando por la posición indicada por readPosition.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

INFINITE_SIZE

public static final int INFINITE_SIZE
Buffer infinito: el tamaño crece a medida que se añaden contenidos

See Also:
Constant Field Values
Constructor Detail

CircularCharBuffer

public CircularCharBuffer()
Crea un buffer circular con la capacidad por defecto La escritura cuando el buffer está lleno bloqueará la ejecución hasta que se libere espacio (no se lanza una IOException)


CircularCharBuffer

public CircularCharBuffer(int newSize)
Crea un nuevo buffer con la capacidad indicada La escritura cuando el buffer está lleno bloqueará la ejecución hasta que se libere espacio (no se lanza una IOException) NOTA: - El buffer puede reservar algunos caracteres para propósitos internos de forma que no toda la capacidad está disponible para la escritura - Si el buffer es de tamaño infinito (INFINITE_SIZE), su tamaño crecerá automáticamente y no se bloqueará o lanzará excepciones pero puede desbordar la memoria

Parameters:
newSize - tamaño del buffer circular en caracteres o CircularCharBuffer.INFINITE_SIZE si se quiere un tamaño infinito

CircularCharBuffer

public CircularCharBuffer(boolean newBlockingWrite)
Crea un nuevo buffer con una capacidad por defecto y el comportamiento especificado cuando se llena el buffer.

Parameters:
newBlockingWrite - true si una escritura en un buffer lleno bloquea el thread hasta que se libere espacio. false si se lanza una IOException en una operación de escritura en un buffer lleno.

CircularCharBuffer

public CircularCharBuffer(int newSize,
                          boolean newBlockingWrite)
Crea un nuevo buffer con una capacidad dada y el comportamiento especificado cuando se llena el buffer. NOTA: - El buffer puede reservar algunos caracteres para propósitos internos de forma que no toda la capacidad está disponible para la escritura - Si el buffer es de tamaño infinito (INFINITE_SIZE), su tamaño crecerá automáticamente y no se bloqueará o lanzará excepciones pero puede desbordar la memoria

Parameters:
newSize - tamaño del buffer circular en caracteres o CircularCharBuffer.INFINITE_SIZE si se quiere un tamaño infinito
newBlockingWrite - true si una escritura en un buffer lleno bloquea el thread hasta que se libere espacio. false si se lanza una IOException en una operación de escritura en un buffer lleno.
Method Detail

getWriter

public java.io.Writer getWriter()
Obtiene un Writer que puede ser utilizado para llenar el buffer Una operacion de escritura puede lanzar un BufferOverflowException si el buffer NO es lo suficientemente grande.

Returns:
el writer

getReader

public java.io.Reader getReader()
Obtiene un Reader que puede ser utilizado para vaciar el buffer El Reader soporta "marcado" a consta de disminuir el tamaño del buffer (no se "machacan" los caracteres "reservados")

Returns:
el Reader al buffer

getEventListener

public BufferEventListener getEventListener()
Devuelve el eventListener a los eventos del buffer

Returns:
el objeto que implementa la interfaz BufferEventListener

setEventListener

public void setEventListener(BufferEventListener theEventListener)
Establece el eventListener a los eventos del buffer

Parameters:
theEventListener - el objeto que implementa el interfaz BufferEventListener

clear

public void clear()
Limpia el contenido del buffer y los streams (Reader/Writer) asociados al buffer se reabren si habían sido cerrados


getAvailable

public int getAvailable()
Devuelve el número de caracteres disponibles para ser leidos NOTA: El número de caracteres disponibles mas el número de caracteres libres pueden no sumar el tamaño del buffer ya que se reserva espacio para uso interno.

Returns:
los caracteres listos para ser leidos

isEmpty

public boolean isEmpty()
Devuelve true si el buffer está vacío (no hay caracteres disponibles para ser leidos)

Returns:
true si el buffer está vacío

getSpaceLeft

public int getSpaceLeft()
Devuelve el número de caracteres que pueden ser escritos en el buffer NOTA: El número de caracteres disponibles mas el número de caracteres libres pueden no sumar el tamaño del buffer ya que se reserva espacio para uso interno.

Returns:
el numero de caracteres que se pueden escribir

isFull

public boolean isFull()
Devuelve true si el buffer está lleno (no hay espacio para escribir)

Returns:
true si el buffer está lleno

getSize

public int getSize()
Devuelve la capacidad del buffer NOTA: El número de caracteres disponibles mas el número de caracteres libres pueden no sumar el tamaño del buffer ya que se reserva espacio para uso interno.

Returns:
la capacidad

getPositionFromLineal

public int getPositionFromLineal(int linealPosition)
Devuelve la posición del array a partir del índice de lectura

Parameters:
linealPosition - posición virtual de un array lineal
Returns:
posición en el array circular

charAt

public char charAt(int index)
            throws java.lang.IndexOutOfBoundsException
Devuelve el caracter situado en la posición indicada. NOTA: Cuando el buffer circular se ve como un CharSequence, la posición de lectura corresponde a la posición 0

Specified by:
charAt in interface java.lang.CharSequence
Parameters:
index - posición que puede ir desde 0 hasta length()
Throws:
java.lang.IndexOutOfBoundsException - si index es negativo o mayor que length()

length

public int length()
Devuelve el número de caracteres en el buffer circular

Specified by:
length in interface java.lang.CharSequence

subSequence

public java.lang.CharSequence subSequence(int start,
                                          int end)
                                   throws java.lang.IndexOutOfBoundsException
Devuelve una subsecuencia del buffer circular NOTA: Cuando el buffer circular se ve como un CharSequence, la posición de lectura corresponde a la posición 0

Specified by:
subSequence in interface java.lang.CharSequence
Parameters:
start - posicion inicial de la subsecuencia (la posicion de lectura es la posición 0)
end - posición final de la subsecuencia (como máximo puede ser igual a length())
Throws:
java.lang.IndexOutOfBoundsException

toString

public java.lang.String toString()
Devuelve el buffer circular completo como string comenzando por la posición indicada por readPosition

Specified by:
toString in interface java.lang.CharSequence

toString

public java.lang.String toString(boolean onlyReadAvaliable)
Devuelve el buffer circular como string comenzando por la posición indicada por readPosition. Mediante el parámetro de entrada se indica si se devolverá el buffer completo o únicamente desde la posición de lectura a la de escritura.

Parameters:
onlyReadAvaliable - - boolean: true - devuelve el String formado desde la posición de lectura a la de escritura. false - devuelve el String del buffer completo a partir de la posición de lectura
Returns:
El String del buffer circular.

main

public static void main(java.lang.String[] args)
Test para probar el temilla...

Parameters:
args -