zoukankan      html  css  js  c++  java
  • 句号压缩过滤器

    1.压缩采样点的简单演示

    public class ServletDemo extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		String data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
    		
    		//找一个内存缓冲字节流
    		ByteArrayOutputStream baos = new ByteArrayOutputStream();
    		//把数据压缩到缓冲字节流流中
    		GZIPOutputStream gout = new GZIPOutputStream(baos);
    		//取出数据:压缩后的
    		byte b[] = data.getBytes();//原始字节
    		System.out.println("原有数据大小:"+b.length);
    		gout.write(b);
    		gout.close();//保证全部的数据都进入内存缓存流
    		
    		//取出压缩后的数据
    		b = baos.toByteArray();
    		System.out.println("压缩后的数据大小:"+b.length);
    		//输出前一定要告知client压缩方式
    		response.setHeader("Content-Encoding", "gzip");
    		response.setContentLength(b.length);//告知client正文的大小
    		//用server的响应对象输出
    		ServletOutputStream out = response.getOutputStream();
    		out.write(b);
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		doGet(request, response);
    	}
    
    }

    2.全站压缩过滤器的一个简单演示样例

    //全站压缩过滤器
    public class GzipFilter implements Filter {
    
    	public void destroy() {
    
    	}
    
    	public void doFilter(ServletRequest req, ServletResponse resp,
    			FilterChain chain) throws IOException, ServletException {
    		HttpServletRequest request = (HttpServletRequest)req;
    		HttpServletResponse response = (HttpServletResponse)resp;
    		GzipHttpServletResponse gresponse = new GzipHttpServletResponse(response);
    		chain.doFilter(request, gresponse);//放行
    		//压缩代码写在此处
    		//找一个内存缓冲字节流
    		ByteArrayOutputStream baos = new ByteArrayOutputStream();
    		//把数据压缩到缓冲字节流流中
    		GZIPOutputStream gout = new GZIPOutputStream(baos);
    		//取出数据:压缩后的
    		byte b[] = gresponse.getOldBytes();//原始字节
    		System.out.println("原有数据大小:"+b.length);
    		gout.write(b);
    		gout.close();//保证全部的数据都进入内存缓存流
    		
    		//取出压缩后的数据
    		b = baos.toByteArray();
    		System.out.println("压缩后的数据大小:"+b.length);
    		//输出前一定要告知client压缩方式
    		response.setHeader("Content-Encoding", "gzip");
    		response.setContentLength(b.length);//告知client正文的大小
    		//用server的响应对象输出
    		ServletOutputStream out = response.getOutputStream();
    		out.write(b);
    	}
    
    	public void init(FilterConfig filterConfig) throws ServletException {
    
    	}
    
    }
    class GzipHttpServletResponse extends HttpServletResponseWrapper{
    	private ByteArrayOutputStream baos = new ByteArrayOutputStream();
    	private PrintWriter pw;
    	public GzipHttpServletResponse(HttpServletResponse response){
    		super(response);
    	}
    	//把原始数据封装到一个缓冲流中
    	@Override
    	public ServletOutputStream getOutputStream() throws IOException {
    		return new MyServletOutputStream(baos);
    	}
    	
    	//字符流:把原始数据封装到一个缓冲流中
    	@Override
    	public PrintWriter getWriter() throws IOException {
    		pw = new PrintWriter(new OutputStreamWriter(baos, super.getCharacterEncoding()));//字符流转成字节流编码会丢失
    		return pw;
    	}
    	//返回baos中的缓存数据:原始
    	public byte[] getOldBytes(){
    		try {
    			if(pw!=null){
    				pw.close();
    			}
    			baos.flush();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return baos.toByteArray();
    	}
    	
    }
    class MyServletOutputStream extends ServletOutputStream{
    	private ByteArrayOutputStream baos;
    	public MyServletOutputStream(ByteArrayOutputStream baos){
    		this.baos = baos;
    	}
    	@Override
    	public void write(int b) throws IOException {
    		baos.write(b);
    	}
    }
    


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    进程状态
    VMware虚拟机的三种联网方法及原理
    关于C++迭代器失效
    头文件:limits.h、float.h
    正则表达式之一:元符号
    MYSQL之批量插入数据库
    PHP之如何判断数字(数字字符串不算)
    使用Process Monitor来得到程序运行参数
    Abusing the C preprocessor
    1+1还是1+1=2?
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4755369.html
Copyright © 2011-2022 走看看