读书人

限制下传和上载

发布时间: 2012-12-24 10:43:14 作者: rapoo

限制上传和下载
不多说了,自己看吧

public class FlowControlOutputStream extends FilterOutputStream {    private long timestamp;    private int maxbps;    private int currentbps;    private int byteswrite;public FlowControlOutputStream(OutputStream out, int maxbps) {super(out);        this.maxbps = maxbps;        this.currentbps = 0;        this.byteswrite = 0;        this.timestamp = System.currentTimeMillis();}public void setMaxbps(int maxbps){this.maxbps = maxbps;}@Overridepublic void write(int oneByte) throws IOException {        synchronized(out){            int avaliable = check();            if(avaliable <= 0){                waitForAvailable();            }            out.write(oneByte);            update(1);        }}@Overridepublic void write(byte[] buffer) throws IOException {write(buffer, 0, buffer.length);}@Overridepublic void write(byte[] buffer, int offset, int length) throws IOException { synchronized(out){            int avaliable = check();            if(avaliable <= 0){                waitForAvailable();            }            out.write(buffer, offset, length);            update(length); }}    private int check(){        long now = System.currentTimeMillis();        if(now - timestamp >= 1000){            timestamp = now;            currentbps = byteswrite;            byteswrite = 0;            return maxbps;        }else{            return maxbps - byteswrite;        }    }     private void waitForAvailable(){        long time = System.currentTimeMillis() - timestamp;        boolean isInterrupted = false;        while(time < 1000){            try{                Thread.sleep(1000 - time);            }catch(InterruptedException e){                isInterrupted = true;            }            time = System.currentTimeMillis() - timestamp;        }        if(isInterrupted)            Thread.currentThread().interrupt();        return;            }     private void update(int n){        byteswrite += n;    }        public int getCurrentbps(){        return currentbps;    }}

读书人网 >编程

热点推荐