亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gzipinputstream.java

?? 手機郵箱撒的方式方式方式的
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
//#condition MUJMAIL_COMPRESSED_CONNECTION/* * Created on Jun 25, 2007 at 11:12:23 AM. *  * Copyright (c) 2007 Robert Virkus / Enough Software * * This file is part of J2ME Polish. * * J2ME Polish is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. *  * J2ME Polish is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with J2ME Polish; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *  * Commercial licenses are also available, please * refer to the accompanying LICENSE.txt or visit * http://www.j2mepolish.org for details. */package mujmail.connections.gzip;import java.io.IOException;import java.io.InputStream;/** * <p>Reads and uncompresses GZIP or DEFLATE encoded input streams.</p> * * <p>Copyright Enough Software 2007 - 2008</p> * <pre> * history *        Jun 25, 2007 - Simon creation * </pre> * @author Simon Schmitt, simon.schmitt@enough.de */public class GZipInputStream extends InputStream {	/**	 * This constant triggers the normal deflate compression as described in rfc 1951.	 */	public static final int TYPE_DEFLATE=0;	/**	 * This constant triggers the gzip compression that is the same as deflate with 	 * some extra header information (see rfc 1952).	 */	public static final int TYPE_GZIP=1;		private InputStream inStream;	private boolean inStreamEnded;		private byte status;	private static final byte EXPECTING_HEADER=0;	private static final byte EXPECTING_DATA=1;	private static final byte EXPECTING_CHECK=2;	private static final byte FINISHED=3;		private boolean hash;	/**	 * The data seems to be decompressed sucessfull if vaildData	 *  is true after processing the whole stream. This is determinded	 *  via counting the processed bytes and depending on the	 *  on the parameters given to the constructor also by using	 *  a CRC32 checksum.	 */	private boolean vaildData;		private int crc32;	private int[] crc32Table=new int[256];		private int type;		// Flags	private boolean BFINAL;//indicates last block	private int BTYPE;// type of compression		// Buffer stuff:	private byte[] window=new byte[32 * 1024]; // every decoder has to support windows up to 32k	private int pProcessed=0;				// data pointer = one after the last processed	private long allPocessed=0;				// amount of processed data mod 2^32		byte[] outBuff;			// the plain data will be stored here before being requested	private int buffsize;	int outEnd=0;						// the position AFTER the last byte of data	int lastEnd=0;						// 		"		the point up to the crc32 was computed	int outStart=0;						// the position of the first bit of data		private int B0len;				// length of remaining plain bytes to process		long[] smallCodeBuffer=new long[2];// (1) contains the merged bitcode and (2) contains the count of those bits	static final byte BL=8; 		// Compression stuff	short[] huffmanTree;		short[] distHuffTree;		/**	 * Creates an input stream capable of GZIP and Deflate with a buffer of 1024 bytes.	 * 	 * @param inputStream 	the stream that contains the compressed data.	 * @param compressionType	TYPE_GZIP or TYPE_DEFLATE	 * @param hash 		set true for data checking, set false for speed reading	 * @throws IOException when the header of a GZIP stream cannot be skipped	 * @see #TYPE_DEFLATE	 * @see #TYPE_GZIP	 */	public GZipInputStream(InputStream inputStream, int compressionType, boolean hash) 	throws IOException	{		this(inputStream, 1024, compressionType, hash);	}		/**	 * Creates an input stream capable of GZIP and Deflate.	 * 	 * @param inputStream 	the stream that contains the compressed data.	 * @param size the size of the internally used buffer	 * @param compressionType	TYPE_GZIP or TYPE_DEFLATE	 * @param hash 		set true for data checking, set false for speed reading	 * @throws IOException when the header of a GZIP stream cannot be skipped	 * @see #TYPE_DEFLATE	 * @see #TYPE_GZIP	 */	public GZipInputStream(InputStream inputStream, int size, int compressionType, boolean hash) 	throws IOException 	{		this.inStream=inputStream;				this.inStreamEnded=false;		this.status=GZipInputStream.EXPECTING_HEADER;				this.hash=hash;		this.type=compressionType;				this.smallCodeBuffer=new long[2];		this.huffmanTree=new short[288*4];						this.distHuffTree=new short[32*4];				this.buffsize=size;		this.outBuff=new byte[size+300];				if (this.type==GZipInputStream.TYPE_GZIP){			ZipHelper.skipheader(inputStream);		}				this.crc32=0;	}	    public void close() throws IOException{    	this.inStream.close();    	    	this.smallCodeBuffer=null;		this.huffmanTree=null;		this.distHuffTree=null;    }	    /**     * This function hides the fact that 'this.window' is a ring buffer     * 		so just pass 'start' and 'len' of data in the window as well     *  	as a destination and it will be copied there.     * @param start     * @param len     * @param dest     */    private void copyFromWindow(int start, int len, byte[] dest, int destoff){    	if (start + len < this.window.length) {    		System.arraycopy(this.window, start, dest, 0+destoff, len);    	} else {    		System.arraycopy(this.window, start, dest, 0+destoff, this.window.length - start);    		System.arraycopy(this.window, 0, dest, this.window.length - start + destoff, len - (this.window.length - start) );    		    	}    }    private void copyIntoWindow(int start, int len, byte[] src, int srcOff){    	if(len + start < this.window.length) {			System.arraycopy(src, srcOff, this.window, start, len);		} else {			System.arraycopy(src, srcOff, this.window, start, this.window.length-start);			System.arraycopy(src, srcOff+(this.window.length-start), this.window, 0, len - (this.window.length-start));		}    	    }            /**     * This function fills the internal outputbuffer reading data form the this.inputStream      *		and inflating it.     * Note: Alf inbuil have bud behavior for interactive protolocs ... try to fill output buffer as much as possible to decrease inflate call     *   Chnage needed to stop after e.g line end in do end of block     */    private void inflate() throws IOException{    	int val=0;    	    	int rep;    	int rem;    	    	int cLen;    	int cPos;    	int aPos;    	    	int copyBytes;    	    	byte[] myWindow=this.window;    	byte[] myOutBuff=this.outBuff;    	    	// shift outputbuffer to the beginning    	System.arraycopy(myOutBuff, this.outStart, myOutBuff, 0, this.outEnd-this.outStart);    	this.outEnd-=this.outStart;    	this.outStart=0;    	    	this.lastEnd = this.outEnd;    	        boolean refill = ( this.inStream.available() == 0); /// Flag whether refillSmallBuffer can call read (and so possibli block) if no data avilable        boolean continueDecodingLoop = true;         if (this.B0len==0){    		if (this.smallCodeBuffer[1]<15){    			refillSmallCodeBuffer( false);                        refill = false;    		}    	}    	    	    	// and fill it by parsing the input-stream    	while ( (myOutBuff.length-this.outEnd>300 && (this.smallCodeBuffer[1]>0  || this.B0len>0)) && this.status!=GZipInputStream.FINISHED){                // parse block header    		if (this.status == GZipInputStream.EXPECTING_HEADER){                    // Process header only if datas are available                    if ( continueDecodingLoop == false ) break;                         processHeader();    		}    		// deal with the data    		    		if (this.status==GZipInputStream.EXPECTING_DATA){	    		// just copy data	    		if (this.BTYPE==0){	    				    			if (this.B0len>0){		    			// copy directly	    				copyBytes=(myOutBuff.length-this.outEnd)>this.B0len ? this.B0len : myOutBuff.length-this.outEnd;	    						    			//at most myOutBuff.length-this.outEnd		    				    				copyBytes=this.inStream.read(myOutBuff, this.outEnd, copyBytes);		    			copyIntoWindow(this.pProcessed, copyBytes, myOutBuff, this.outEnd);		    					    			this.outEnd+=copyBytes;		    			this.pProcessed=(this.pProcessed +copyBytes) & 32767;// % (1<<15);		    					    			this.B0len-=copyBytes;	    			}else{		    			if(this.BFINAL){		    				this.status=GZipInputStream.EXPECTING_CHECK;		    			} else {		    				this.status=GZipInputStream.EXPECTING_HEADER;		    			}		    			if (this.smallCodeBuffer[1]<15){		    				continueDecodingLoop = refillSmallCodeBuffer( refill);                                                refill = false;		    			}	    			}	    				    		}// inflate	    		else {	    				    			if (this.smallCodeBuffer[1]<15){	    				refillSmallCodeBuffer( true); // Can block ... we need this data for decoding	    			}		    			    			val=ZipHelper.deHuffNext(this.smallCodeBuffer,this.huffmanTree);	    					    				    		// normal single byte		    		if (val<256){		    					    			//this.window[this.pProcessed]=(byte)val;		    			myWindow[this.pProcessed]=(byte)val;		    			this.pProcessed=(this.pProcessed +1) &  32767;// % (1<<15);		    					    			myOutBuff[this.outEnd]=(byte)val;		    			this.outEnd++;		    					    					    		}// copy: pointer + len 		    		else if (val!=256) {						if (val>285){							//ERROR: data > 285 was decoded. This is invalid data.;							throw new IOException("1");						}								    			// parse the pointer 								    			// cLen		    			// 		read some bits		    			cLen=popSmallBuffer(ZipHelper.LENGTH_CODE[(val-257)<<1]);		    			//		add the offset		    			cLen+=ZipHelper.LENGTH_CODE[((val-257)<<1)+1];		    					    			// cPos		    			//    	resolve the index		    			if (this.smallCodeBuffer[1]<15){		    				refillSmallCodeBuffer( true);		    			}		    			// DISTANCE		    			val=ZipHelper.deHuffNext(this.smallCodeBuffer, this.distHuffTree);		    					    			//	 	resolve the value		    			cPos=popSmallBuffer(ZipHelper.DISTANCE_CODE[val<<1]);								    			cPos+=ZipHelper.DISTANCE_CODE[(val<<1)+1];		    					    					    			// process the pointer (the data does always fit)		    					    			// the absolute starting position for copying data		    			aPos=this.pProcessed - cPos;		    			aPos+=aPos<0 ? myWindow.length:0;		    					    			// how often will the data be copied?		    			rep=cLen/cPos;		    			rem=cLen-cPos*rep;		    					    			for (int j = 0; j < rep; j++) {		    				// cPos < cLen		    				copyFromWindow(aPos, cPos, myOutBuff,this.outEnd);			    			copyIntoWindow(this.pProcessed, cPos, myOutBuff, this.outEnd);		    				this.outEnd+=cPos;		    				this.pProcessed=(this.pProcessed +cPos) &  32767;//% (1<<15);		    			}		    					    			// cPos > cLen OR remainder 		    			copyFromWindow(aPos, rem, myOutBuff,this.outEnd);// from window into buffer, and again into window		    			copyIntoWindow(this.pProcessed, rem, myOutBuff, this.outEnd);		    			this.outEnd+=rem;		    			this.pProcessed=(this.pProcessed +rem) &  32767;// % (1<<15);		    					    					    		}// val=256		    		else {		    			//System.out.println("Block End code=" + huffmanCode[256] + "  pP="+pProcessed + " popC: " + popcount[0]);		    			if(this.BFINAL){		    				this.status=GZipInputStream.EXPECTING_CHECK;		    			} else {		    				this.status=GZipInputStream.EXPECTING_HEADER;		    			}		    		}		    		if (this.smallCodeBuffer[1]<15){		    			continueDecodingLoop = refillSmallCodeBuffer( refill);		    		}		    	}	    	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品电影一区亚洲| 成人av在线资源网| 成人黄色电影在线| 欧美人与禽zozo性伦| 亚洲国产成人一区二区三区| 午夜久久久久久| 99久久综合色| 欧美韩国日本不卡| 久久精品国产亚洲aⅴ| 欧美色涩在线第一页| 中文一区在线播放| 精品一区二区三区视频| 欧美综合色免费| 亚洲欧美另类久久久精品2019| 国产麻豆精品视频| 欧美videossexotv100| 五月婷婷色综合| 欧美唯美清纯偷拍| 一区二区三区欧美日韩| 99r国产精品| 国产精品不卡一区| 99riav一区二区三区| 国产精品久久精品日日| 福利电影一区二区三区| 久久久欧美精品sm网站| 寂寞少妇一区二区三区| 日韩欧美一区二区免费| 裸体一区二区三区| 日韩欧美一区二区久久婷婷| 日韩av一区二区在线影视| 这里只有精品99re| 日韩精品1区2区3区| 欧美一级生活片| 久久激情五月婷婷| 精品国产乱码久久久久久免费| 美脚の诱脚舐め脚责91| 欧美大胆人体bbbb| 国产精品99久久久久| 国产午夜精品一区二区三区嫩草| 国产精品18久久久久| 国产女主播一区| 99精品视频在线播放观看| 亚洲三级免费观看| 欧美三电影在线| 午夜久久久久久久久久一区二区| 欧美一卡2卡3卡4卡| 极品瑜伽女神91| 国产精品美女久久久久久久网站| 成人h精品动漫一区二区三区| 亚洲欧美在线另类| 欧美日韩一区二区在线观看 | 欧美v日韩v国产v| 国产99精品在线观看| 一区二区三区久久| 91精品麻豆日日躁夜夜躁| 国产精品99久久不卡二区| 中文字幕在线观看一区| 欧美视频一区二区在线观看| 麻豆成人免费电影| 最新国产成人在线观看| 在线播放日韩导航| 国产成人综合视频| 亚洲综合成人在线视频| 精品久久国产字幕高潮| www.综合网.com| 日韩福利电影在线观看| 国产婷婷色一区二区三区| 欧美在线观看视频一区二区三区| 日本va欧美va欧美va精品| 中文字幕欧美激情一区| 欧美老肥妇做.爰bbww| 高清在线不卡av| 日韩国产欧美三级| 亚洲精品免费在线观看| 精品久久久久久久一区二区蜜臀| 91视频com| 国产盗摄视频一区二区三区| 午夜国产精品一区| 中文字幕一区在线观看| 26uuu欧美| 538prom精品视频线放| 91在线观看免费视频| 国产精品12区| 久久99久久99小草精品免视看| 亚洲免费在线视频一区 二区| 精品国产三级a在线观看| 欧美日韩你懂得| av不卡在线播放| 国产精品一区二区果冻传媒| 午夜成人免费电影| 亚洲自拍偷拍网站| 最好看的中文字幕久久| 国产欧美日韩综合| 精品国产污污免费网站入口 | 久久精品国产亚洲一区二区三区| 亚洲黄色免费电影| 国产精品天天看| 久久久国产综合精品女国产盗摄| 欧美日韩亚洲另类| 91网站视频在线观看| 成人性色生活片| 国产一区激情在线| 激情综合色丁香一区二区| 亚洲va韩国va欧美va精品| 亚洲精选免费视频| 亚洲视频资源在线| 中文字幕一区二区三区在线播放| 国产欧美一区二区三区在线看蜜臀 | 精品美女一区二区| 欧美一区二区成人| 日韩欧美精品三级| 欧美成人精品福利| 日韩视频不卡中文| 精品日韩av一区二区| 精品少妇一区二区三区视频免付费| 3atv在线一区二区三区| 7777精品伊人久久久大香线蕉完整版| 欧美在线观看一区| 欧美久久婷婷综合色| 在线不卡免费欧美| 精品久久免费看| 国产午夜精品久久久久久免费视| 国产午夜一区二区三区| 中文字幕精品—区二区四季| 国产精品天干天干在线综合| 综合中文字幕亚洲| 亚洲小说欧美激情另类| 天天色天天操综合| 精品一区二区三区免费| 国产一区二区不卡老阿姨| 国产成人一级电影| 在线中文字幕一区二区| 欧美一区二区三区免费| 2024国产精品| 亚洲私人黄色宅男| 欧美bbbbb| 豆国产96在线|亚洲| 欧美在线视频日韩| 日韩一区二区免费在线观看| 26uuu色噜噜精品一区二区| 国产精品欧美久久久久无广告| 亚洲精品日日夜夜| 韩国毛片一区二区三区| av成人免费在线观看| 欧美一区二区视频网站| 中文字幕久久午夜不卡| 亚洲狠狠丁香婷婷综合久久久| 美女视频黄久久| 99国产精品久| 欧美tickling挠脚心丨vk| 亚洲免费毛片网站| 极品少妇xxxx精品少妇偷拍| 91热门视频在线观看| 精品国产亚洲在线| 一级特黄大欧美久久久| 国产精品影视网| 欧美精品aⅴ在线视频| 国产精品蜜臀av| 老鸭窝一区二区久久精品| 97久久精品人人做人人爽50路| 欧美一二三四在线| 亚洲视频免费在线| 国内精品国产三级国产a久久 | 国产美女精品在线| 欧美色图免费看| 国产精品天天看| 免费观看在线综合| 欧美视频你懂的| 国产精品久久久久久福利一牛影视| 天堂蜜桃91精品| 色综合激情久久| 欧美国产日韩在线观看| 久国产精品韩国三级视频| 欧美在线观看视频一区二区| 国产精品午夜在线| 国产精品中文字幕日韩精品| 日韩西西人体444www| 亚洲一区在线电影| 色综合天天综合网天天看片| 久久免费午夜影院| 久久爱www久久做| 欧美精品日日鲁夜夜添| 亚洲精品视频在线观看网站| 成人av在线资源| 国产精品美女www爽爽爽| 精品中文av资源站在线观看| 日韩一区二区视频| 日韩中文欧美在线| 欧美日韩国产经典色站一区二区三区| 国产精品久久99| 91在线观看污| 亚洲另类在线视频| 91麻豆免费在线观看| 亚洲欧洲精品一区二区三区| 国产suv一区二区三区88区| 国产欧美日韩麻豆91| 丁香激情综合五月| 国产精品网曝门| 99九九99九九九视频精品| 亚洲人成小说网站色在线 |