Java FileChannel.size() против File.length()

Существуют ли обстоятельства, при которых FileChannel.size() и File.length() будут отличаться? См. пример кода ниже:

File file = new File(name);
FileInputStream stream = new FileInputStream(file);
FileChannel channel = stream.getChannel();
long channel_size = channel.size();
long file_length = file.length();

person Matt    schedule 22.01.2014    source источник
comment
Почему бы вам не распечатать оба значения и посмотреть, отличаются ли они?   -  person Josh M    schedule 23.01.2014
comment
@JoshM Я думаю, что ОП ищет ситуации, в которых их быть не может.   -  person Sotirios Delimanolis    schedule 23.01.2014


Ответы (1)


Они могут быть разными, потому что new File(name).length() всегда проверяет заданный путь. Когда вы используете FileInputStream, вы присоединяетесь к этому файлу независимо от того, что с ним происходит.

Например, в Linux вы можете переименовать, заменить или удалить файл, который используется. FileInputStream будет по-прежнему указывать исходный размер файла, тогда как File даст вам то, что заменило его, если таковое имеется.

person Peter Lawrey    schedule 22.01.2014