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

org.aspectj.weaver.CompressingDataOutputStream Maven / Gradle / Ivy

Go to download

AspectJ tools most notably contains the AspectJ compiler (AJC). AJC applies aspects to Java classes during compilation, fully replacing Javac for plain Java classes and also compiling native AspectJ or annotation-based @AspectJ syntax. Furthermore, AJC can weave aspects into existing class files in a post-compile binary weaving step. This library is a superset of AspectJ weaver and hence also of AspectJ runtime.

There is a newer version: 1.9.22.1
Show newest version
/* *******************************************************************
 * 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