熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

體驗流調試的威力

2013-11-15 11:43:48  來源: JSP教程 

  如果你在使用流的過程中出現了問題那麼你也許需要調試功能
  
  Java的I/O框架是基於一系列連接在一起的流實現的當這種設計增強了部件重用性的同時它也使得定位錯誤變得困難通過在流中插入你自己定義的調試流的時候錯誤定位將會變得更簡單例如調試流CountingOutputStream這個類報告它已經寫了多少個字節這個功能對使用flush造成字節丟失的情況非常有用
  
  下面是一個使用CountingOutputStream的例子
  
  package comgenerationjavaio;
  
   import javaioIOException;
   import javaioOutputStream;
   import javaioFilterOutputStream;
  
   public class CountingOutputStream extends FilterOutputStream {
  
   private int count;
  
   public CountingOutputStream( OutputStream out ) {
   super(out);
   }
  
   public void write(byte[ ] b) throws IOException {
   count += blength;
   superwrite(b);
   }
  
   public void write(byte[ ] b int off int len) throws IOException {
   count += len;
   superwrite(b off len);
   }
  
   public void write(int b) throws IOException {
   count += ;
   superwrite(b);
   }
  
   public int getCount( ) {
   return unt;
   }
  
   }
  在下面的小片代碼中存在一個簡單的錯誤—流既沒有被flush也沒有被關閉
  
  File file = ;
   byte[ ] data = ;
   OutputStream out = new BufferedOutputStream(
   new FileOutputStream( file )
   );
   outwrite(data);
  插入CountingOutputStream來發現問題
  
  File file = ;
   byte[ ] data = ;
   CountingOutputStream cos = new CountingOutputStream(
   new FileOutputStream( file )
   );
   OutputStream out = new BufferedOutputStream( cos );
   outwrite(data);
   Systemerrprintln( Bytes written: +cosgetCount( ) );
  如果這段代碼輸出
  
  Bytes Written:
  
  那麼可以很快的發現問題出在BufferedOutputStream上它沒有發送任何東西給FileOutputStream流這種方法可以更容易發現作為緩沖的流沒有flush它的緩沖
  
  雖然這個例子過於簡化了但是它仍然證明了流調試的有效性當鏈中存在四個或者更多的流的時候插入並且移動調試流將幫助開發者更快的發現問題
  
  
  

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19515.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.