gpt4 book ai didi

java - 限制写入 PrintStream 的字节数

转载 作者:行者123 更新时间:2023-12-02 00:31:09 26 4
gpt4 key购买 nike

我正在运行一些不安全的代码,我已将其 stdoutstderr 流设置为包装在 PrintStream< 中的 FileStream/s。 (标准输出/错误必须重定向。)

是否有任何方法可以配置这些重定向的 FileStreams/PrintStreams 以设置最大写入量(例如 10 MB),例如,

while (true) System.out.write("lots of bytes");

不会向服务器磁盘写入过多的数据。

代码确实有 15 秒的时间限制,但我想在这里有一个单独的守卫。

最佳答案

一种方法是定义 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);
}
}

关于java - 限制写入 PrintStream 的字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9049887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com