LHA Library for Java

jp.gr.java_conf.dangan.io
Class CachedInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by jp.gr.java_conf.dangan.io.CachedInputStream
All Implemented Interfaces:
java.io.Closeable

public class CachedInputStream
extends java.io.InputStream

キャッシュを使用して高速化するための入力ストリーム。
BufferedInputStream とは read系メソッドが synchronized されていないため、同期処理によるロスがない、mark/reset は キャッシュ内の読み込み位置の移動で行えるときのみサポートであり、 それ以上は接続された入力ストリームの性能による、等の違いがある。

 -- revision history --
 $Log: CachedInputStream.java,v $
 Revision 1.3  2002/12/05 00:00:00  dangan
 [maintenance]
     ソース整備

 Revision 1.2  2002/11/02 00:00:00  dangan
 [bug fix]
     available() でブロックせずに読み込める量よりも大きい値を返していた。

 Revision 1.1  2002/09/05 00:00:00  dangan
 [change]
     EndOfStream に達した後の read( new byte[0] ) や 
     read( byte[] buf, int off, 0 ) の戻り値を
     InputStream と同じく 0 になるようにした。

 Revision 1.0  2002/09/05 00:00:00  dangan
 add to version control
 [bug fix]
     mark() で 接続された in に渡す readLimit の計算が甘かったため、
     要求された readLimit に達する前にマーク位置が破棄される事があった。
     read( buf, off, len ) 内の System.arraycopy の呼び出しで 
     dst と src を逆にしていた。
 [change]
     EndOfStream に達した後の read( new byte[0] ) や
     read( buf, off,0 )  が -1 を返すように修正。
 [maintenance]
     タブ廃止
     ライセンス文の修正

 

Version:
$Revision: 1.3 $
Author:
$Author: dangan $

Constructor Summary
CachedInputStream(java.io.InputStream in)
          デフォルトのサイズのキャッシュを持つ CachedInputStreamを構築する。
CachedInputStream(java.io.InputStream in, int cacheSize)
          指定されたサイズのキャッシュを持つ CachedInputStreamを構築する。
 
Method Summary
 int available()
          接続された入力ストリームからブロックしないで 読み込むことのできるバイト数を得る。
 void close()
          この入力ストリームを閉じ、使用していた 全てのリソースを開放する。
 void mark(int readLimit)
          接続された入力ストリームの現在位置にマークを設定し、 reset() メソッドでマークした時点の 読み込み位置に 戻れるようにする。
 boolean markSupported()
          接続された入力ストリームが mark() と reset() を サポートするかを得る。
 int read()
          接続されたストリームから 1バイトのデータを 0〜255 にマップして読み込む。
 int read(byte[] buffer)
          接続されたストリームから bufferを満たすように データを読み込む。
このメソッドは buffer を満たすまでデータを読み込むか、 EndOfStreamに到達するまでブロックする。
 int read(byte[] buffer, int index, int length)
          接続されたストリームから buffer に index で指定された 位置へ length バイトデータを読み込む。
このメソッドは length バイト読み込むか、 EndOfStreamに到達するまでブロックする。
 void reset()
          接続された入力ストリームの読み込み位置を最後に mark() メソッドが呼び出されたときの位置に設定する。
 long skip(long length)
          接続された入力ストリームのデータを length バイト読み飛ばす。
このメソッドは length バイト読み飛ばすか EndOfStream に到達するまでブロックする。
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CachedInputStream

public CachedInputStream(java.io.InputStream in)
デフォルトのサイズのキャッシュを持つ CachedInputStreamを構築する。

Parameters:
in - キャッシュが必要な入力ストリーム
Throws:
java.lang.IllegalArgumentException - in が null だった場合

CachedInputStream

public CachedInputStream(java.io.InputStream in,
                         int cacheSize)
指定されたサイズのキャッシュを持つ CachedInputStreamを構築する。

Parameters:
in - キャッシュが必要な入力ストリーム
cacheSize - キャッシュのサイズ
Throws:
java.lang.IllegalArgumentException - cacheSize が 0以下であるか、 in が null だった場合
Method Detail

read

public int read()
         throws java.io.IOException
接続されたストリームから 1バイトのデータを 0〜255 にマップして読み込む。

Specified by:
read in class java.io.InputStream
Returns:
読み出された 1バイトのデータを返す。
既に EndOfStreamに達していた場合は -1を返す。
Throws:
java.io.IOException - 接続された入力ストリームで 入出力エラーが発生した場合

read

public int read(byte[] buffer)
         throws java.io.IOException
接続されたストリームから bufferを満たすように データを読み込む。
このメソッドは buffer を満たすまでデータを読み込むか、 EndOfStreamに到達するまでブロックする。

Overrides:
read in class java.io.InputStream
Parameters:
buffer - 読み込んだデータを格納するためのバイト配列
Returns:
buffer に読み込んだデータ量をバイト数で返す。
既に EndOfStreamに達していた場合は -1を返す。
Throws:
java.io.IOException - 接続された入力ストリームで 入出力エラーが発生した場合

read

public int read(byte[] buffer,
                int index,
                int length)
         throws java.io.IOException
接続されたストリームから buffer に index で指定された 位置へ length バイトデータを読み込む。
このメソッドは length バイト読み込むか、 EndOfStreamに到達するまでブロックする。

Overrides:
read in class java.io.InputStream
Parameters:
buffer - 読み込んだデータを格納するためのバイト配列
index - buffer内のデータ読み込み開始位置
length - bufferに読み込むデータ量
Returns:
buffer に読み込んだデータ量をバイト数で返す。
既に EndOfStreamに達していた場合は -1を返す。
Throws:
java.io.IOException - 接続された入力ストリームで 入出力エラーが発生した場合

skip

public long skip(long length)
          throws java.io.IOException
接続された入力ストリームのデータを length バイト読み飛ばす。
このメソッドは length バイト読み飛ばすか EndOfStream に到達するまでブロックする。

Overrides:
skip in class java.io.InputStream
Parameters:
length - 読み飛ばすバイト数。
Returns:
実際に読み飛ばされたバイト数。
Throws:
java.io.IOException - 接続された入力ストリームで 入出力エラーが発生した場合

mark

public void mark(int readLimit)
接続された入力ストリームの現在位置にマークを設定し、 reset() メソッドでマークした時点の 読み込み位置に 戻れるようにする。

Overrides:
mark in class java.io.InputStream
Parameters:
readLimit - マーク位置に戻れる限界のバイト数。 このバイト数を超えてデータを読み 込んだ場合 reset()できなくなる可 能性がある。

reset

public void reset()
           throws java.io.IOException
接続された入力ストリームの読み込み位置を最後に mark() メソッドが呼び出されたときの位置に設定する。

Overrides:
reset in class java.io.InputStream
Throws:
java.io.IOException -
(1) CachedInputStream に mark がなされていない場合。
(2) 接続された入力ストリームが markSupported()で false を返す場合。
(3) 接続された入力ストリームで 入出力エラーが発生した場合。
の何れか。

markSupported

public boolean markSupported()
接続された入力ストリームが mark() と reset() を サポートするかを得る。

Overrides:
markSupported in class java.io.InputStream
Returns:
ストリームが mark() と reset() を サポートする場合は true。
サポートしない場合は false。

available

public int available()
              throws java.io.IOException
接続された入力ストリームからブロックしないで 読み込むことのできるバイト数を得る。

Overrides:
available in class java.io.InputStream
Returns:
ブロックしないで読み出せるバイト数。
Throws:
java.io.IOException - 接続された入力ストリームで 入出力エラーが発生した場合

close

public void close()
           throws java.io.IOException
この入力ストリームを閉じ、使用していた 全てのリソースを開放する。

Specified by:
close in interface java.io.Closeable
Overrides:
close in class java.io.InputStream
Throws:
java.io.IOException - 接続された入力ストリームで 入出力エラーが発生した場合

LHA Library for Java

When you found typographical errors or omissions, Please mail to cqw10305@nifty.com
The company name and product name which are used in this document, it is the trademark or registered trademark of each company generally.
Copyright © 2001-2002 Michel Ishizuka. All Rights Reserved.