|
What this is
Other links
The source code
/*
** Contributed by "Bay" <bayard@generationjava.com>
**
** This code has been placed into the public domain.
*/
package com.ice.tar;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;
// we extend TarOutputStream to have the same type,
// BUT, we don't use ANY methods. It's all about
// typing.
/**
* Outputs tar.gz files. Added functionality that it
* doesn't need to know the size of an entry. If an
* entry has zero size when it is put in the Tar, then
* it buffers it until it's closed and it knows the size.
*
* @author "Bay" <bayard@generationjava.com>
*/
public
class TarGzOutputStream
extends TarOutputStream
{
private TarOutputStream tos = null;
private GZIPOutputStream gzip = null;
private ByteArrayOutputStream bos = null;
private TarEntry currentEntry = null;
public
TarGzOutputStream( OutputStream out )
throws IOException
{
super( null );
this.gzip = new GZIPOutputStream( out );
this.tos = new TarOutputStream( this.gzip );
this.bos = new ByteArrayOutputStream();
}
// proxy all methods, but buffer if unknown size
public void
setDebug( boolean b )
{
this.tos.setDebug(b);
}
public void
setBufferDebug( boolean b )
{
this.tos.setBufferDebug(b);
}
public void
finish()
throws IOException
{
if ( this.currentEntry != null )
{
closeEntry();
}
this.tos.finish();
}
public void
close()
throws IOException
{
this.tos.close();
this.gzip.finish();
}
public int
getRecordSize()
{
return this.tos.getRecordSize();
}
public void
putNextEntry(TarEntry entry)
throws IOException
{
if ( entry.getSize() != 0 )
{
this.tos.putNextEntry( entry );
}
else
{
this.currentEntry = entry;
}
}
public void
closeEntry()
throws IOException
{
if(this.currentEntry == null)
{
this.tos.closeEntry();
}
else
{
this.currentEntry.setSize( bos.size() );
this.tos.putNextEntry( this.currentEntry );
this.bos.writeTo( this.tos );
this.tos.closeEntry();
this.currentEntry = null;
this.bos = new ByteArrayOutputStream();
}
}
public void
write( int b )
throws IOException
{
if ( this.currentEntry == null )
{
this.tos.write( b );
}
else
{
this.bos.write( b );
}
}
public void
write( byte[] b )
throws IOException
{
if ( this.currentEntry == null )
{
this.tos.write( b );
}
else
{
this.bos.write( b );
}
}
public void
write( byte[] b, int start, int length )
throws IOException
{
if ( this.currentEntry == null )
{
this.tos.write( b, start, length );
}
else
{
this.bos.write( b, start, length );
}
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.