一种方式做到这一点是定义你包中文件流,这使内部计数器,它增加每write
,并达到设定的阈值后,开始投掷Exceptions
或者干脆忽略写入FilterOutputStream
。
东西线沿线的:
import java.io.*;
class LimitOutputStream extends FilterOutputStream{
private long limit;
public LimitOutputStream(OutputStream out,long limit){
super(out);
this.limit = limit;
}
public void write(byte[]b) throws IOException{
long left = Math.min(b.length,limit);
if (left<=0)
return;
limit-=left;
out.write(b, 0, (int)left);
}
public void write(int b) throws IOException{
if (limit<=0)
return;
limit--;
out.write(b);
}
public void write(byte[]b,int off, int len) throws IOException{
long left = Math.min(len,limit);
if (left<=0)
return;
limit-=left;
out.write(b,off,(int)left);
}
}
只是不要子类'FileOutputStream'。 (你如何限制不安全代码的时间?) – 2012-02-04 21:22:54
@ TomHawtin-tackline子类化FileOutputStream有什么问题? (我正在使用@弗拉德的解决方案,但...);而我只是使用BASH脚本。 – 2012-02-05 00:58:36
有人可能会来,并添加一个额外的方法,让淘气的代码绕过你的覆盖。 (还要注意整数溢出。) – 2012-02-05 03:32:09