体验流调试的威力

2016-02-19 18:58 9 1 收藏

下面图老师小编要跟大家分享体验流调试的威力,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - 编程语言 】

?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)


  假如你在使用流的过程中出现了问题,那么你也许需要调试功能。
  
  Java的I/O框架是基于一系列连接在一起的流实现的。当这种设计增强了部件重用性的同时,它也使得定位错误变得困难。通过在流中插入你自己定义的调试流的时候,错误定位将会变得更简单。例如,调试流CountingOutputStream这个类报告它已经写了多少个字节。这个功能对使用flush造成字节丢失的情况非常有用。
  
  下面是一个使用CountingOutputStream的例子:
  
  package com.generationjava.io;
  
  import java.io.IOException;
  import java.io.OutputStream;
  import java.io.FilterOutputStream;
  
  public class CountingOutputStream extends FilterOutputStream {
  
  private int count;
  
  public CountingOutputStream( OutputStream out ) {
  super(out);
  }
  
  public void write(byte[ ] b) throws IOException {
  count += b.length;
  super.write(b);
  }
  
  public void write(byte[ ] b, int off, int len) throws IOException {
  count += len;
  super.write(b, off, len);
  }
  
  public void write(int b) throws IOException {
  count += 2;
  super.write(b);
  }
  
  public int getCount( ) {
  return this.count;
  }
  
  }
  在下面的小片代码中,存在一个简单的错误—流既没有被flush也没有被关闭。
  
  File file = ...;
  byte[ ] data = ...;
  OutputStream out = new BufferedOutputStream(
  new FileOutputStream( file )
  );
  out.write(data);
  插入CountingOutputStream来发现问题:
  
  File file = ...;
  byte[ ] data = ...;
  CountingOutputStream cos = new CountingOutputStream(
  new FileOutputStream( file )
  );
  OutputStream out = new BufferedOutputStream( cos );
  out.write(data);
  System.err.println( "Bytes written: "+cos.getCount( ) );
  假如这段代码输出:
  
  Bytes Written: 0
  
  那么可以很快的发现问题出在BufferedOutputStream上,它没有发送任何东西给FileOutputStream流。这种方法可以更轻易发现作为缓冲的流没有flush它的缓冲。
  
  虽然这个例子过于简化了,但是它仍然证实了流调试的有效性。当链中存在四个或者更多的流的时候,插入并且移动调试流将帮助开发者更快的发现问题。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1619713.html

延伸阅读
标签: Web开发
面对一大段的javascript脚本,以前总是会很头疼,找不到调试他的方法,如果出现什么错误,总是要从头分析,然后插入很多Alert();调试起来很麻烦。      实际上Visual Studio 对JavaScript 脚本是可以设置断点进行调试的。只是有很多象我这样的新手不会用而已。      只需要打开IE—工具—Intern...
标签: autocad教程
    用户在Auto CAD 系统中使用D IE SEL表达式时,如果系统变量MACROTRACE的值置为1,则执行DIESEL表达式,会在命令提示行显示运行结果及错误信息。该变量的缺省值为0。     例如,将变量MACROTRACE置为1后,在用DIESEL表达式给MODEMACRO赋值时,如果在“getvar”和“dwgname”之间不加“,”...
QQ浏览器升级新体验跨屏、视频、省流   QQ浏览器4.4版本日前全新上线,此版本不仅对4.3版本中的跨屏穿越功能进行了全方位升级,推出扫二维码、啾啾分享两项跨屏模式,更与新增热门视频板块完美搭配,让用户乐享视频跨屏带来的优质体验,同时还为用户最为关心的流量问题带来了省流解决方案。 看片神器:聚合海量视频资源,支持快...
我们在书写js的过程中,经常会出现一些js错误,对于如果找出错误的解决方法就是关键,下面的文章就是相关的调试方法。 A 使用alert() 和document.write() 方法监视变量值 如果要中断代码的运行,监视变量的值,则使用alert() 方法; 如果需要查看的值很多,则使用document.write() 方法,避免反复单击“确定”按钮; B 使用window.oner...
标签: Java JAVA基础
  前言     凡是有JSP编写经验的人都有JSP调试困难的体会。由于自动化调试工具的缺乏使得在调试JSP时不得不在文件中大量的使用打印语句。这种做法对于定位JSP范围内的错误是一个简单有效的手段,但如何快速有效的定位在JSP中调用的对象的内部错误就显得有点力不从心了。因为这样将不得不频繁地编译、发布、启停服务器,给...

经验教程

640

收藏

92
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部