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 org.apache.servicemix.bundles.aspectj
Show all versions of org.apache.servicemix.bundles.aspectj
This OSGi bundle wraps aspectjrt and aspectjweaver ${pkgVersion} jar files.
/* *******************************************************************
* Copyright (c) 2010 Contributors
* All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0
* which accompanies this distribution and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* 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));
}
}