Использование Java FileInputStream - PullRequest
2 голосов
/ 04 августа 2009

В java.io.FileInputStream есть метод int read(Byte[] buffer,int offset,int numBytes); как мы можем использовать эту функцию - есть ли разница между этим методом и read(byte[] buffer)?

Ответы [ 4 ]

7 голосов
/ 04 августа 2009

Как указывает Javadoc (и имена параметров указывают), метод со смещением и 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 почти все операции с буферами предлагают такой интерфейс. При правильном использовании вы можете избежать копирования / буферизации данных больше времени, чем необходимо.

1 голос
/ 04 августа 2009

Эта функция очень полезна для чтения всего файла в память. Смотрите этот пример,

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. 
1 голос
/ 04 августа 2009

Только что получил это от Javadoc.

Считывает до байтов данных из этого входного потока в массив байтов. Если len не равно нулю, метод блокируется, пока не будет доступен какой-либо ввод; в противном случае байты не читаются, и возвращается 0.

Параметры:

  • b - буфер, в который считываются данные.
  • off - начальное смещение в массиве назначения b
  • len - максимальное количество прочитанных байтов.

Возвращает: общее количество байтов, считанных в буфер, или -1, если данных больше нет, поскольку достигнут конец файла.

http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html#read(byte[], int, int)

0 голосов
/ 04 августа 2009
...