需求是这样的,我想要截获标准输出流,输出到另一个地方,同时希望保持原有的标准输出流不受影响,相当于把原有的输出流复制成了两份,有办法可以做到吗?
解决方案 »
- 父类和子类的实例问题
- 目前有比较靠谱的Java飞信API用来发信息么,09年以前的好像都不能用了。
- 初学者刚接触线程,弄不明白了
- 关于eclipse开发模式下项目目录的问题
- 开发工具
- 在jbuilder里调用oracle存储过程,怎样实现任意多个输入参数呢?
- 安装jubilder7 enterprise,在new 中怎么没有webservice选项
- 简单题目(我不会啊!急!!!!)
- add()
- Eclipse装上了,不知道怎么用???郁闷,有中文教程吗?
- 如何用Swing编写界面,可以显示 各种格式的文件啊,比如pdf,doc等
- flash 读取 servlet 生成的xml 显示 undefined
BufferedReader br = new BufferedReader (~~~某个输入流 );
BufferedWriter bw = new BufferedWriter (~~~某个输出流 );
String line = "";
while( (line=br.readLine())!=null ){
System.out.println(line);//标准输出
bw.write(line);bw.flush();//其它输出流,如果其它输出流要作相应操作,那就对line切割,重组,查找之后再用bw写入就是了。
}
你说的内容比较绕,我理解你希望能用一个类似于 Writer 或 OutputStream 之类的输出,但是同时可以输出给两个目标,类似于输出的时候就做了克隆。比如同时将内容写进两个不同的文件,对么?如果我理解正确的话,你的要求,Java提供的标准类库没有此类实现。
需要你自己去包装原始的OutputStream,然后去重写相关的write方法,然后同时写入两个地方,类似于:
public class MyOutputStream extends OutputStream {
private OutputStream originOS;
private OutputStream otherOS;
public MyOutputStream (OutputStream originOS) {
this.originOS = originOS;
this.otherOS = new FileOutputStream("xxxxxxooooo");
} public void write(byte data) { // 类似这样,所有函数都需要重写
originOS.write(data); // 写入原始流
otherOS.write(data); // 写入新流
}
}
看你包装的目标,如果是OutputStream,则OutputStream所定义的函数都需要重写,否则就有可能漏杀。其实也不多,总共就3个函数:
void write(byte[] b) // 如果非要偷懒可以不重写这个,它是调用第二个实现的
void write(byte[] b, int off, int len)
void write(int b)
但是这个好像不符合楼主的问题了。楼主是想把一个输出流直接操作,改变方向。不过确实API中没有提供此方法。但是你的那个方法不是又new了一个新的流了吗??个人觉得是脱裤子放屁。
多此一举。