org.aspectj.weaver.CompressingDataOutputStream Maven / Gradle / Ivy
/* *******************************************************************
* 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));
}
}