org.aspectj.weaver.CompressingDataOutputStream Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of aspectjmatcher Show documentation
Show all versions of aspectjmatcher Show documentation
The AspectJ matcher can be used for matching pointcuts independently of any AspectJ compilation or weaving steps.
Most notably, this can be used by frameworks such as Spring AOP which utilise the @AspectJ pointcut syntax but
implement aspect weaving in a way independent of AspectJ, e.g. using dynamic proxies.
/* *******************************************************************
* Copyright (c) 2010 Contributors
* All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v 2.0
* which accompanies this distribution and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
*
* Contributors:
* Andy Clement (SpringSource)
* ******************************************************************/
package org.aspectj.weaver;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* A variation of a DataOutputStream that is linked to a constant pool writer. The linked constant pool can be used to compress
* objects into to simple index references into the constant pool. The corresponding decompression is done in the
* VersionedDataInputStream.
*
* @author Andy Clement
*/
public class CompressingDataOutputStream extends DataOutputStream {
private ConstantPoolWriter constantPoolWriter;
public boolean compressionEnabled = true;
public CompressingDataOutputStream(ByteArrayOutputStream baos, ConstantPoolWriter constantPoolWriter) {
super(baos);
this.constantPoolWriter = constantPoolWriter;
}
public CompressingDataOutputStream(FileOutputStream fos) {
super(fos);
}
public boolean canCompress() {
return constantPoolWriter != null && compressionEnabled;
}
/**
* @param signature of the form 'La/b/c/d;'
* @return the constant pool index
*/
public int compressSignature(String signature) {
if (constantPoolWriter == null) {
throw new IllegalStateException();
}
return constantPoolWriter.writeUtf8(signature);
}
/**
* @param filepath a file system path 'c:\a\b\c.txt' or '/a/b/c.txt'
* @return the constant pool index
*/
public int compressFilepath(String filepath) {
if (constantPoolWriter == null) {
throw new IllegalStateException();
}
return constantPoolWriter.writeUtf8(filepath);
}
/**
* @param name a simple name (for example a method or field name)
* @return the constant pool index
*/
public int compressName(String name) {
if (constantPoolWriter == null) {
throw new IllegalStateException();
}
return constantPoolWriter.writeUtf8(name);
}
/**
* @param name a simple name (for example a method or field name)
*/
public void writeCompressedName(String name) throws IOException {
writeShort(compressName(name));
}
/**
* @param signature of the form 'La/b/c/d;'
*/
public void writeCompressedSignature(String signature) throws IOException {
writeShort(compressSignature(signature));
}
/**
* @param path a file system path 'c:\a\b\c.txt' or '/a/b/c.txt'
*/
public void writeCompressedPath(String path) throws IOException {
writeShort(compressFilepath(path));
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy