にjava.io.FileInputStream
は、方法がありint read(Byte[] buffer,int offset,int numBytes)
ます。この関数の使い方 - このメソッドと の違いはありread(byte[] buffer)
ますか?
4 に答える
Javadoc が指摘しているように (およびパラメーターの名前が示しているように)、offset と numBytes を使用するメソッドは、バッファーの一部のみを使用して出力を入れます。
public int read(byte[] b,
int off,
int len)
throws IOException
Parameters:
b - the buffer into which the data is read.
off - the start offset of the data.
len - the maximum number of bytes read.
上書きしたくないデータが既に含まれている既存のバッファを再利用する場合は、このメソッドを使用できます (もちろん、numBytes
最初のバッファoffset
は上書きされます)。
Java では、バッファに対するほとんどすべての操作で、この種のインターフェイスが提供されます。適切に使用すると、必要以上にデータをコピー/バッファリングすることを避けることができます。
javadoc からこれを取得しました。
この入力ストリームから最大 len バイトのデータをバイト配列に読み取ります。len がゼロでない場合、何らかの入力が利用可能になるまでメソッドはブロックされます。それ以外の場合、バイトは読み取られず、0 が返されます。
パラメーター:
- b - データが読み込まれるバッファ。
- off - 宛先配列の開始オフセット b
- len - 読み取られる最大バイト数。
戻り値: バッファーに読み込まれた合計バイト数、またはファイルの終わりに達したためにデータがなくなった場合は -1。
http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html#read(byte[] , int, int)
この関数は、ファイル全体をメモリに読み込むのに非常に便利です。この例を参照してください。
File = new File("/anywhere/anyfile");
InputStream is = new FileInputStream(file);
long fileSize = file.length();
byte[] bytes = new byte[(int)fileSize];
int offset = 0;
int count=0;
while (offset < fileSize) {
count=is.read(bytes, offset, fileSize-offset));
if (count >= 0)
offset += count;
else
throw new IOException("Can't read file "+file.getName());
}
is.close();
// Now bytes has all the complete file.