public CompressedMarshObjectConvertor allocate() { return new CompressedMarshObjectConvertor(9); }
public MarshObject getMarshObject(Object o) throws IOException { return getMarshObjectInternal(o, false); }
/** * @param level the compression level (0-9), The default setting is DEFAULT_COMPRESSION. * @throws IllegalArgumentException if the compression level is invalid */ public CompressedMarshObjectConvertor(int level, ISmartLengthBasedCacheCallback cacheCallback) { _byteArrayCache = createSerializationByteArrayCache(cacheCallback); _level = level; try { _bao = new GSByteArrayOutputStream(); _zo = new ZipOutputStream(_bao); _zo.setLevel(_level); _zo.putNextEntry(new ZipEntry(Integer.toString(zipEntryCounter++))); _oo = getObjectOutputStream(_zo); _bai = new GSByteArrayInputStream(new byte[0]); _zi = new ZipInputStream(_bai); getObject(getMarshObjectInternal("", true)); // remove header from // in/out } catch (Exception e) { if (_logger.isLoggable(Level.SEVERE)) { _logger.log(Level.SEVERE, e.getMessage(), e); } } }
/** * Decompress the desired object using GigaSpaces compression facility * * @return obj decompressed object */ Object decompressObject(MarshObject objToDecompress) throws IOException, ClassNotFoundException { CompressedMarshObjectConvertor cv = null; Object obj = null; try { cv = _compressedConvertorPool.getResource(); obj = cv.getObject(objToDecompress); } finally { if (cv != null) _compressedConvertorPool.freeResource(cv); } return obj; }
private MarshObject getMarshObjectInternal(Object o, boolean init) throws IOException { byte[] bc; if (init) { bc = serializeToByteArray(o); } else { _bao.setBuffer(_byteArrayCache.get()); _bao.reset(); // check for next time if (++zipEntryCounter < MAX_ENTRIES) { _zo.putNextEntry(new ZipEntry(Integer.toString(zipEntryCounter))); _oo.reset(); } else // open new zip OutputStream for next time { zipEntryCounter = 0; _zo = new ZipOutputStream(_bao); _zo.setLevel(_level); _zo.putNextEntry(new ZipEntry(Integer.toString(zipEntryCounter))); _oo = getObjectOutputStream(_zo); // remove ObjectOutputStream header from zip stream _zo.closeEntry(); _bao.reset(); _zo.putNextEntry(new ZipEntry(Integer.toString(++zipEntryCounter))); _oo.reset(); } bc = serializeToByteArray(o); _byteArrayCache.notifyUsedSize(bc.length); _bao.setBuffer(DUMMY_BUFFER); } return new CompressedMarshObject(bc); }
public Object getObject(MarshObject marsh) throws IOException, ClassNotFoundException { if (!(marsh instanceof CompressedMarshObject)) throw new IOException("Can decompress only CompressedMarshObject"); _bai.setBuffer(marsh.getBytes()); _zi.getNextEntry(); if (_oi == null) { _oi = getObjectInputStream(_zi); } Object object = _oi.readObject(); // It seems ZipInputStream has some internal state and it needs // to be cleared both before and after setting the underlying // InputStream // buffer _zi.getNextEntry(); _bai.setBuffer(DUMMY_BUFFER); return object; }
/** * Compress the desired object using GigaSpaces compression facility */ private MarshObject compressObject(Object objToCompress) throws IOException { CompressedMarshObjectConvertor cv = null; try { cv = _compressedConvertorPool.getResource(); MarshObject cmo = cv.getMarshObject(objToCompress); return cmo; } finally { if (cv != null) { _compressedConvertorPool.freeResource(cv); } } }
_compressedConvertorPool = new ResourcePool<CompressedMarshObjectConvertor>(CompressedMarshObjectConvertor.getFactory(), 0, 100);
@Override public CompressedMarshObjectConvertor allocate( IMemoryAwareResourcePool resourcePool) { return new CompressedMarshObjectConvertor(9, SmartLengthBasedCache.toCacheCallback(resourcePool)); } }