国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

體驗流調試的威力

2019-11-17 05:59:44
字體:
來源:轉載
供稿:網友

 


假如你在使用流的過程中出現了問題,那么你也許需要調試功能。

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它的緩沖。

雖然這個例子過于簡化了,但是它仍然證實了流調試的有效性。當鏈中存在四個或者更多的流的時候,插入并且移動調試流將幫助開發者更快的發現問題。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沾益县| 衡水市| 孟村| 元谋县| 新乡市| 富锦市| 澎湖县| 柳州市| 原平市| 桑日县| 微博| 明水县| 富阳市| 靖边县| 正宁县| 紫阳县| 水富县| 万山特区| 巨鹿县| 察哈| 涟源市| 和顺县| 那曲县| 渑池县| 新平| 襄樊市| 丹凤县| 辽阳县| 汶川县| 皋兰县| 大英县| 乌鲁木齐县| 行唐县| 宽甸| 阿合奇县| 苏尼特右旗| 东台市| 突泉县| 依兰县| 嘉鱼县| 宜良县|