Class Segment
The first component of a segment is the header; this contains (amongst other things) the expected counts of constant pool entries, which in turn defines how
many values need to be read from the stream. Because values are variable width (see Codec), it is not possible to calculate the start of the next
segment, although one of the header values does hint at the size of the segment if non-zero, which can be used for buffering purposes.
Note that this does not perform any buffering of the input stream; each value will be read on a byte-by-byte basis. It does not perform GZip decompression
automatically; both of these are expected to be done by the caller if the stream has the magic header for GZip streams (GZIPInputStream.GZIP_MAGIC).
In any case, if GZip decompression is being performed the input stream will be buffered at a higher level, and thus this can read on a byte-oriented basis.
Format:
pack200_archive:
(pack200_segment)+
pack200_segment:
segment_header
*band_headers :BYTE1
cp_bands
attr_definition_bands
ic_bands
class_bands
bc_bands
file_bands
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intLog level quiet 0static final intLog level standard 1static final intLog level verbose 2 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected AttrDefinitionBandsprotected ClassBandsGets the constant pool.protected CpBandsGets the constant pool bands.protected IcBandsGets the inner class bands.Gets the segment header.voidLogs a message.voidoverrideDeflateHint(boolean deflateHint) Overrides the archive's deflate hint with the given booleanvoidsetLogLevel(int logLevel) Sets the log level.voidsetLogStream(OutputStream logStream) Sets the log output stream.voidsetPreRead(boolean value) Sets whether unpacking buffers its input.voidunpack(InputStream inputStream, JarOutputStream out) Unpacks a packed stream (either .pack. or .pack.gz) into a corresponding JarOuputStream.voidwriteJar(JarOutputStream out) Writes the segment to an output stream.
-
Field Details
-
LOG_LEVEL_VERBOSE
Log level verbose 2- See Also:
-
LOG_LEVEL_STANDARD
Log level standard 1- See Also:
-
LOG_LEVEL_QUIET
Log level quiet 0- See Also:
-
-
Constructor Details
-
Segment
public Segment()
-
-
Method Details
-
getAttrDefinitionBands
-
getClassBands
-
getConstantPool
Gets the constant pool.- Returns:
- the constant pool.
-
getCpBands
Gets the constant pool bands.- Returns:
- the constant pool bands.
-
getIcBands
Gets the inner class bands.- Returns:
- the inner class bands.
-
getSegmentHeader
Gets the segment header.- Returns:
- the segment header.
-
log
Logs a message.- Parameters:
messageLevel- the message level.message- the message.
-
overrideDeflateHint
Overrides the archive's deflate hint with the given boolean- Parameters:
deflateHint- the deflate hint to use
-
setLogLevel
Sets the log level.- Parameters:
logLevel- the log level.
-
setLogStream
Sets the log output stream.- Parameters:
logStream- log output stream.
-
setPreRead
Sets whether unpacking buffers its input.- Parameters:
value- whether unpacking buffers its input.
-
unpack
public void unpack(InputStream inputStream, JarOutputStream out) throws IOException, Pack200Exception Unpacks a packed stream (either .pack. or .pack.gz) into a corresponding JarOuputStream.- Parameters:
inputStream- a packed input stream, preferably aBoundedInputStream.out- output stream.- Throws:
Pack200Exception- if there is a problem unpackingIOException- if there is a problem with I/O during unpacking
-
writeJar
Writes the segment to an output stream. The output stream should be pre-buffered for efficiency. Also takes the same input stream for reading, since the file bits may not be loaded and thus just copied from one stream to another. Doesn't close the output stream when finished, in case there are more entries (for example further segments) to be written.- Parameters:
out- the JarOutputStream to write data to- Throws:
IOException- if an error occurs while reading or writing to the streams
-