Package net.contrapunctus.lzma

Source Code of net.contrapunctus.lzma.EncoderThread

// EncoderThread.java -- run LZMA encoder in a separate thread
// Copyright (c)2007 Christopher League <league@contrapunctus.net>

// This is free software, but it comes with ABSOLUTELY NO WARRANTY.
// GNU Lesser General Public License 2.1 or Common Public License 1.0

package net.contrapunctus.lzma;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.concurrent.ArrayBlockingQueue;

import SevenZip.Compression.LZMA.Encoder;

class EncoderThread extends Thread
{
    public static final Integer          DEFAULT_DICT_SZ_POW2 = new Integer(20);
    protected ArrayBlockingQueue<byte[]> q;
    protected InputStream                in;
    protected OutputStream               out;
    protected Encoder                    enc;
    protected IOException                exn;
   
    private static final PrintStream     dbg                  = System.err;
    private static final boolean         DEBUG;
   
    static
    {
        String ds = null;
        try
        {
            ds = System.getProperty("DEBUG_LzmaCoders");
        }
        catch (final SecurityException e)
        {
        }
        DEBUG = ds != null;
    }
   
    /**
     * @param dictSzPow2
     *            If non-null, equivalent to the N in the -dN arg to LzmaAlone
     * @param fastBytes
     *            If non-null, equivalent to the N in the -fbN arg to LzmaAlone
     */
    EncoderThread(OutputStream _out, Integer dictSzPow2, Integer fastBytes)
    {
        q = ConcurrentBufferOutputStream.newQueue();
        in = ConcurrentBufferInputStream.create(q);
        out = _out;
        enc = new Encoder();
        exn = null;
        enc.SetDictionarySize(1 << (dictSzPow2 == null ? DEFAULT_DICT_SZ_POW2
                : dictSzPow2).intValue());
        if (fastBytes != null)
        {
            enc.SetNumFastBytes(fastBytes.intValue());
        }
        if (DEBUG)
        {
            dbg.printf("%s << %s (%s)%n", this, in, q);
        }
    }
   
   
    public void run()
    {
        try
        {
            enc.SetEndMarkerMode(true);
            if (LzmaOutputStream.LZMA_HEADER)
            {
                enc.WriteCoderProperties(out);
                // 5d 00 00 10 00
                final long fileSize = -1;
                for (int i = 0; i < 8; i++)
                {
                    out.write((int) (fileSize >>> 8 * i) & 0xFF);
                }
            }
            if (DEBUG)
            {
                dbg.printf("%s begins%n", this);
            }
            enc.Code(in, out, -1, -1, null);
            if (DEBUG)
            {
                dbg.printf("%s ends%n", this);
            }
            out.close();
        }
        catch (final IOException _exn)
        {
            exn = _exn;
            if (DEBUG)
            {
                dbg.printf("%s exception: %s%n", exn.getMessage());
            }
        }
    }
   
   
    public String toString()
    {
        return String.format("Enc@%x", hashCode());
    }
}
TOP

Related Classes of net.contrapunctus.lzma.EncoderThread

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.