1つのソースの決意
1.1分析源1(jdk1.7のアプリケーション)
1.2分析源(2つの2 jdk1.7のアプリケーション)
1.3ソースの解像度(春アプリケーション)3
1.4分析源4(サーブレットのアプリケーション)
1.5分析源5(アプリケーションmyBatiesで)
1つのソースの決意
1.1分析源1(jdk1.7のアプリケーション)
BufferedReaderの
/ ** * * BufferedReaderの继承了Readeの rは、并把リーダー组合到BufferedReaderの中 * / パブリック クラス BufferedReaderのは、拡張リーダー{ プライベートReaderでを。 / ** *の入力バッファでバッファリング文字入力ストリームを作成し 、指定したサイズ*を。 * * @param Readerで * @param SZの入力バッファサイズ * * @exceptionの はIllegalArgumentException szが<= 0の場合 * / 公共 BufferedReaderのは、中(リーダーint型SZ){ スーパー()において、 場合(SZ <= 0 ) スロー 新しい、IllegalArgumentExceptionを( "バッファサイズ<= 0" ); この .IN = で。 CB = 新しい CHAR [SZ]。 nextChar = nChars = 0 。 } }
リーダー
/ ** *リーダー是抽象类 * / パブリック 抽象 クラス Readerが実装{閉鎖可能、読み取り可能 )
1.2分析源(2つの2 jdk1.7のアプリケーション)
図クラスのUML
装飾親サブクラス1:BufferedInputStreamを
パブリック クラス にBufferedInputStreamは拡張FilterInputStream {
//入ってくる親親クラス (入力ストリーム内)公共BufferedInputStreamを{ この;(DefaultBufferSize、中) } / ** * データストリームの読み取りを実現し、装飾的な役割を果たし * / プライベート ボイド塗りつぶしを()スローにIOException { バイト [] =バッファgetBufIfOpen(); IFは(markposの<0 ) POS = 0; / * NOマーク:捨てるバッファ* / 他 IF(POS> = buffer.length) / *バッファ内に残さない部屋* / 場合(markposの> 0){ / * 捨てることができるバッファの初めの部分* / int型 SZ = POS - markposの。 System.arraycopyの(バッファ、markposの、バッファ、 0 、SZ)。 POS = SZ。 markposの = 0 ; } そう であれば(> = buffer.length marklimit){ markposの = -1。 / * バッファが大きすぎるなった、無効マーク* / POS = 0; / * ドロップバッファの内容* / } 他 { / * バッファ成長* / INT = POS * 2 NSZ 。 もし(NSZ> marklimit) NSZ = marklimit。 バイト NBUF [] = 新しい バイト[NSZ]。 System.arraycopyの(バッファ、 0、NBUF、0 、POS)。 場合(!bufUpdater.compareAndSet(これ、バッファ、NBUF)){ // 非同期近いがあった場合BUFを置き換えることはできません。 //注:塗りつぶし()場合、これは変更する必要があります 。//は、これまで複数のスレッドからアクセスできるようになります。 // しかし、今のところ、CASが失敗することができる唯一の方法は、近くを経ています。 // bufのを主張== nullを。 スロー 新しい IOExceptionが(「ストリームが閉じて」); } バッファ = NBUF。 } カウント = POSと、 INT、N = getInIfOpen()を読み出す(バッファ、POS、buffer.length - POS)。 もし(N> 0 ) カウント = N + POS。 } }
装飾親1: FilterInputStream
パブリック クラス FilterInputStreamは延び入力ストリーム{ / ** *入力ストリームがフィルタリングされます。 * / で揮発性のInputStreamを保護。 保護FilterInputStream(入力ストリームにおける){ = this.in で; } }
装飾されたクラス:のInputStream
パブリック 抽象 クラス入力ストリームを実装閉鎖可能を{ }
装飾親クラス2:FileInputStreamを
パブリッククラス FileInputStreamのは、拡張のInputStream { / * * 传入ファイルを、装饰成のInputStream * / 公共のFileInputStream(File file)指定スローにFileNotFoundException { 文字列名 =(ファイルを=!ヌル file.getPath():?ヌル)。 セキュリティマネージャのセキュリティ = System.getSecurityManager()。 もし(!セキュリティ= ヌル){ security.checkRead(名); } 場合(名前== nullが){ スロー 新規のNullPointerExceptionが(); } であれば(file.isInvalid()){ スロー 新たにFileNotFoundExceptionを( "無効なファイル・パス" )。 } fdが = 新しい()のFileDescriptorします。 fd.incrementAndGetUseCount(); この .path = 名前; (名前)を開きます。 } }
1.3ソースの解像度(春アプリケーション)3
TransactionAwareCacheDecorator
/ ** *このクラスは、クラスのキャッシュストレージおよび関連事項である * / パブリック クラス TransactionAwareCacheDecorator 実装キャッシュ { プライベート 決勝キャッシュ TARGETCACHE; 公共TransactionAwareCacheDecorator(キャッシュ TARGETCACHE){ Assert.notNull(TARGETCACHE、「ターゲットではないが、キャッシュがNULLでなければなりません」); この .targetCache = TARGETCACHE; } }
1.4分析源4(サーブレットのアプリケーション)
1.5分析源5(アプリケーションmyBatiesで)
パブリック クラス FifoCacheは、実装キャッシュ { 民間 最終キャッシュデリゲートを。 民間のDeque <オブジェクト> キーリスト。 プライベート int型のサイズ。 公共FifoCache(キャッシュデリゲート) { この .delegate = デリゲート。 この .keyList = 新しい LinkedListは<オブジェクト> (); この .size = 1024 ; } }