Initial Commit
This commit is contained in:
150
iTechSharp/srcbc/util/zlib/ZDeflaterOutputStream.cs
Normal file
150
iTechSharp/srcbc/util/zlib/ZDeflaterOutputStream.cs
Normal file
@@ -0,0 +1,150 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace Org.BouncyCastle.Utilities.Zlib {
|
||||
/// <summary>
|
||||
/// Summary description for DeflaterOutputStream.
|
||||
/// </summary>
|
||||
public class ZDeflaterOutputStream : Stream {
|
||||
protected ZStream z=new ZStream();
|
||||
protected int flushLevel=JZlib.Z_NO_FLUSH;
|
||||
private const int BUFSIZE = 4192;
|
||||
protected byte[] buf=new byte[BUFSIZE];
|
||||
private byte[] buf1=new byte[1];
|
||||
|
||||
protected Stream outp;
|
||||
|
||||
public ZDeflaterOutputStream(Stream outp) : this(outp, 6, false) {
|
||||
}
|
||||
|
||||
public ZDeflaterOutputStream(Stream outp, int level) : this(outp, level, false) {
|
||||
}
|
||||
|
||||
public ZDeflaterOutputStream(Stream outp, int level, bool nowrap) {
|
||||
this.outp=outp;
|
||||
z.deflateInit(level, nowrap);
|
||||
}
|
||||
|
||||
|
||||
public override bool CanRead {
|
||||
get {
|
||||
// TODO: Add DeflaterOutputStream.CanRead getter implementation
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public override bool CanSeek {
|
||||
get {
|
||||
// TODO: Add DeflaterOutputStream.CanSeek getter implementation
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public override bool CanWrite {
|
||||
get {
|
||||
// TODO: Add DeflaterOutputStream.CanWrite getter implementation
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public override long Length {
|
||||
get {
|
||||
// TODO: Add DeflaterOutputStream.Length getter implementation
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public override long Position {
|
||||
get {
|
||||
// TODO: Add DeflaterOutputStream.Position getter implementation
|
||||
return 0;
|
||||
}
|
||||
set {
|
||||
// TODO: Add DeflaterOutputStream.Position setter implementation
|
||||
}
|
||||
}
|
||||
|
||||
public override void Write(byte[] b, int off, int len) {
|
||||
if(len==0)
|
||||
return;
|
||||
int err;
|
||||
z.next_in=b;
|
||||
z.next_in_index=off;
|
||||
z.avail_in=len;
|
||||
do{
|
||||
z.next_out=buf;
|
||||
z.next_out_index=0;
|
||||
z.avail_out=BUFSIZE;
|
||||
err=z.deflate(flushLevel);
|
||||
if(err!=JZlib.Z_OK)
|
||||
throw new IOException("deflating: "+z.msg);
|
||||
if (z.avail_out < BUFSIZE)
|
||||
{
|
||||
outp.Write(buf, 0, BUFSIZE-z.avail_out);
|
||||
}
|
||||
}
|
||||
while(z.avail_in>0 || z.avail_out==0);
|
||||
}
|
||||
|
||||
public override long Seek(long offset, SeekOrigin origin) {
|
||||
// TODO: Add DeflaterOutputStream.Seek implementation
|
||||
return 0;
|
||||
}
|
||||
|
||||
public override void SetLength(long value) {
|
||||
// TODO: Add DeflaterOutputStream.SetLength implementation
|
||||
|
||||
}
|
||||
|
||||
public override int Read(byte[] buffer, int offset, int count) {
|
||||
// TODO: Add DeflaterOutputStream.Read implementation
|
||||
return 0;
|
||||
}
|
||||
|
||||
public override void Flush() {
|
||||
outp.Flush();
|
||||
}
|
||||
|
||||
public override void WriteByte(byte b) {
|
||||
buf1[0]=(byte)b;
|
||||
Write(buf1, 0, 1);
|
||||
}
|
||||
|
||||
public void Finish() {
|
||||
int err;
|
||||
do{
|
||||
z.next_out=buf;
|
||||
z.next_out_index=0;
|
||||
z.avail_out=BUFSIZE;
|
||||
err=z.deflate(JZlib.Z_FINISH);
|
||||
if(err!=JZlib.Z_STREAM_END && err != JZlib.Z_OK)
|
||||
throw new IOException("deflating: "+z.msg);
|
||||
if(BUFSIZE-z.avail_out>0){
|
||||
outp.Write(buf, 0, BUFSIZE-z.avail_out);
|
||||
}
|
||||
}
|
||||
while(z.avail_in>0 || z.avail_out==0);
|
||||
Flush();
|
||||
}
|
||||
|
||||
public void End() {
|
||||
if(z==null)
|
||||
return;
|
||||
z.deflateEnd();
|
||||
z.free();
|
||||
z=null;
|
||||
}
|
||||
|
||||
public override void Close() {
|
||||
try{
|
||||
try{Finish();}
|
||||
catch (IOException) {}
|
||||
}
|
||||
finally{
|
||||
End();
|
||||
outp.Close();
|
||||
outp=null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user