Использование FileInputStream от Java
-
22-07-2019 - |
Вопрос
В 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.