• 软件测试技术
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘

字号: | 推荐给好友 上一篇 | 下一篇

J2SE综合:在Java程序中截获控制台输出 (2)

发布: 2008-5-08 10:04 | 作者: 不详 | 来源: 赛迪网技术社区 | 查看: 25次 | 进入软件测试论坛讨论

领测软件测试网 软件测试技术门户`vYz2X:`$v$MV

1.4 解决问题 软件测试技术门户 Jr'oT_Ct
要防止管道流前两个局限所带来的问题,方法之一是用一个ByteArrayOutputStream作为代理或替代PipedOutputStream。 Listing 4显示了一个LoopedStreams类,它用一个ByteArrayOutputStream提供和Java管道流类似的功能,但不会出现死锁和 IOException异常。这个类的内部仍旧使用管道流,但隔离了本文介绍的前两个问题。我们先来看看这个类的公用方法(参见图3)。构造函数很简单,它连接管道流,然后调用startByteArrayReaderThread()方法(稍后再讨论该方法)。getOutputStream()方法返回一个OutputStream(具体地说,是一个ByteArrayOutputStream)用以替代PipedOutputStream。写入该 OutputStream的数据最终将在getInputStream()方法返回的流中作为输入出现。和使用PipedOutputStream的情形不同,向ByteArrayOutputStream写入数据的线程的激活、写数据、结束不会带来负面效果。
(i6c5Jqx(J1Q,s"|
*A$N-F&B'L Y图三:ByteArrayOutputStream原理
`)v%~`-Dq)i!Jyz软件测试技术门户[s0W$XQOKw6` _
软件测试技术门户J#j+i;`my
【Listing 4:防止管道流应用中出现的常见问题】
BRL%zRimport java.io.*;
(NyuL heowpublic class LoopedStreams { 软件测试技术门户S2x;Y0xBr GP
    private PipedOutputStream pipedOS =  软件测试技术门户L~&QG;{TN
        new PipedOutputStream();
Y? Cs