2

java.io.FileInputStreamは、方法がありint read(Byte[] buffer,int offset,int numBytes)ます。この関数の使い方 - このメソッドと の違いはありread(byte[] buffer)ますか?

4

4 に答える 4

7

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 では、バッファに対するほとんどすべての操作で、この種のインターフェイスが提供されます。適切に使用すると、必要以上にデータをコピー/バッファリングすることを避けることができます。

于 2009-08-04T10:46:38.020 に答える
1

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)

于 2009-08-04T10:47:20.107 に答える
1

この関数は、ファイル全体をメモリに読み込むのに非常に便利です。この例を参照してください。

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. 
于 2009-08-04T12:42:38.360 に答える
0

http://java.sun.com/docs/books/tutorial/essential/io/index.html

于 2009-08-04T10:45:22.857 に答える