All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ctc.wstx.io.BufferRecycler Maven / Gradle / Ivy

There is a newer version: 0.10.0
Show newest version
package com.ctc.wstx.io;

/**
 * This is a small utility class, whose main functionality is to allow
 * simple reuse of raw byte/char buffers. It is usually used through
 * ThreadLocal member of the owning class pointing to
 * instance of this class through a SoftReference. The
 * end result is a low-overhead GC-cleanable recycling: hopefully
 * ideal for use by stream readers.
 *

* Regarding implementation: the key design goal is simplicity; and to * that end, different types of buffers are handled separately. While * code may look inelegant as a result (wouldn't it be neat to just * have generic char[]/byte[] buffer accessors?), benefit is that * no data structures are needed, just simple references. As long * as usage pattern is well known (which it is, for stream readers) * this should be highly optimal and robust implementation. */ public final class BufferRecycler { private char[] mSmallCBuffer = null; // temp buffers private char[] mMediumCBuffer = null; // text collector private char[] mFullCBuffer = null; // for actual parsing buffer private byte[] mFullBBuffer = null; public BufferRecycler() { } // // // Char buffers: // // Small buffers, for temporary parsing public char[] getSmallCBuffer(int minSize) { char[] result = null; if (mSmallCBuffer != null && mSmallCBuffer.length >= minSize) { result = mSmallCBuffer; mSmallCBuffer = null; } //System.err.println("DEBUG: Alloc CSmall: "+result); return result; } public void returnSmallCBuffer(char[] buffer) { //System.err.println("DEBUG: Return CSmall ("+buffer.length+"): "+buffer); mSmallCBuffer = buffer; } // // Medium buffers, for text output collection public char[] getMediumCBuffer(int minSize) { char[] result = null; if (mMediumCBuffer != null && mMediumCBuffer.length >= minSize) { result = mMediumCBuffer; mMediumCBuffer = null; } //System.err.println("DEBUG: Alloc CMed: "+result); return result; } public void returnMediumCBuffer(char[] buffer) { mMediumCBuffer = buffer; //System.err.println("DEBUG: Return CMed ("+buffer.length+"): "+buffer); } // // Full buffers, for parser buffering public char[] getFullCBuffer(int minSize) { char[] result = null; if (mFullCBuffer != null && mFullCBuffer.length >= minSize) { result = mFullCBuffer; mFullCBuffer = null; } //System.err.println("DEBUG: Alloc CFull: "+result); return result; } public void returnFullCBuffer(char[] buffer) { mFullCBuffer = buffer; //System.err.println("DEBUG: Return CFull ("+buffer.length+"): "+buffer); } // // // Byte buffers: // // Full byte buffers, for byte->char conversion (Readers) public byte[] getFullBBuffer(int minSize) { byte[] result = null; if (mFullBBuffer != null && mFullBBuffer.length >= minSize) { result = mFullBBuffer; mFullBBuffer = null; } //System.err.println("DEBUG: Alloc BFull: "+result); return result; } public void returnFullBBuffer(byte[] buffer) { mFullBBuffer = buffer; //System.err.println("DEBUG: Return BFull ("+buffer.length+"): "+buffer); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy