体验流调试的威力

最爱擦擦擦擦擦

最爱擦擦擦擦擦

2016-02-19 18:58

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

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

(本文来源于图老师网站,更多请访问https://m.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它的缓冲。
  
  虽然这个例子过于简化了,但是它仍然证实了流调试的有效性。当链中存在四个或者更多的流的时候,插入并且移动调试流将帮助开发者更快的发现问题。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

体验流调试的威力

编程语言 网络编程
体验流调试的威力

《信长之野望12革新威力加强版》上手体验

电脑网络
《信长之野望12革新威力加强版》上手体验

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Java调试教程--多线程调试

编程语言 网络编程
Java调试教程--多线程调试

《信长之野望14 威力加强版》个人体验心得

游戏动漫
《信长之野望14 威力加强版》个人体验心得

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

《星际争霸》战术研究 拖把流之初体验——Ipxzerg

星际争霸
《星际争霸》战术研究 拖把流之初体验——Ipxzerg

《信长之野望14 威力加强版》种田流筑支城心得

游戏动漫
《信长之野望14 威力加强版》种田流筑支城心得

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Checked Exception与Runtime Exception 的区别

Checked Exception与Runtime Exception 的区别

认识JDBC 2.0中的高级数据类型

认识JDBC 2.0中的高级数据类型
下拉加载更多内容 ↓