GZIPInputStream形式(gzip圧縮形式)かどうかを判断する

1262 ワード

                InputStream ips = null;
		//  
		byte[] header = new byte[2];
		if (isGzip()) {
			try {
				BufferedInputStream bis = new BufferedInputStream(connection.getInputStream());
				bis.mark(2);
				int result = bis.read(header);
				// reset 
				bis.reset();
				//  GZIP 
				int ss = (header[0] & 0xff) | ((header[1] & 0xff) << 8);
				if(result!=-1 && ss == GZIPInputStream.GZIP_MAGIC) {
					//System.out.println(" ...");
					ips= new GZIPInputStream(bis);
				} else {
			        //  
					ips= bis;
				}
			} catch (java.io.IOException e) {
				e.printStackTrace();
				ips = connection.getInputStream();
			}
		} else {
			ips = connection.getInputStream();
		}

ヘッダーにgzipが含まれているかどうかを判断する
public boolean isGzip() {
		boolean gzip = false;
		for (String key : this.getHeaders().keySet()) {
			if (key.equalsIgnoreCase("Accept-Encoding") && this.getHeaders().get(key).contains("gzip")) {
				gzip = true;
				break;
			}
		}
		return gzip;
	}