Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

Параметры:

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

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

http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html#read (байт[], 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. 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top