Работа с файлами и файловыми системами: до NIO, с NIO и с NIO2 в будущем - PullRequest
2 голосов
/ 08 марта 2011

До Java 1.4 было обычной практикой работать с файлами, перемещая байты между различными InputStreams / OutputStreams.

Начиная с Java 1.4, где было добавлено NIO , предлагается использоватьКаналы для того же.

С NIO2 в Java 7 будет еще один API в java.nio.file, который поддерживает такие вещи, как

val source = Paths.get("fooDir/fooFile.txt")
val target = Paths.get("barDir/barFile.txt")
source moveTo target
source createLinkTo target

Являются ли старые более или менее бесполезными сейчас для операций с файловой системой, если вы не хотите касаться байтов вручную?

Ответы [ 3 ]

6 голосов
/ 22 марта 2011

Для большинства операций NIO2 позволит вам делать больше / лучше.

Некоторые операции просто невозможны при использовании устаревших API (некоторые атрибуты, ACL, уведомления об изменениях файлов, улучшенная обработка ошибок ...).

И лучше всего: это не обязательно сложнее.

Чтобы ответить на ваш вопрос: когда вы могли бы выполнять некоторые операции с двумя разными API, я не вижу ни одного варианта использования, где старыйпозволил бы сделать это лучше.

Было некоторое обсуждение:

Java NIO FileChannel против FileOutputstream производительность / полезность http://mailinator.blogspot.com/2008/02/kill-myth-please-nio-is-not-faster-than.html

Но яЯ бы сказал, что новейшие API разработаны , чтобы быть быстрее.Если в какой-то ситуации это не так, ожидайте, что обновление jvm восстановит ситуацию, не меняя код, если вы использовали более новые API.

5 голосов
/ 25 марта 2011

Я добавлю свои 2 цента здесь. @Ymajoros и @Matt суммировали это довольно хорошо.

Определенно, новый NIO будет лучше, чем его предшественники. Было много ограничений в старых классах файлов. Я перешел с C ++ на задний план и обнаружил, что, несмотря на то, что Apis проще в использовании, им не хватало многих функций. Прямо сейчас также, если вы посмотрите на классы, если вы попытаетесь запросить удаленный каталог, вы можете увидеть некоторую медлительность или ваша JVM может зависнуть. Это исправлено в 7. Также следует отметить, что некоторые файловые системы поддерживают символические ссылки, и для этого предусмотрены соответствующие условия. Добавляются итераторы для составления списка каталогов, а также он будет поддерживать POSIX и модель управления ACL.

5 голосов
/ 19 марта 2011

Рекомендуется использовать более новые API, когда это возможно.Они обычно лучше справляются с угловыми случаями, такими как символические ссылки.Они также, скорее всего, будут построены непосредственно на примитивах ОС, что обеспечит лучшее использование оборудования.Таким образом, короткий ответ на ваш вопрос «да, старые в значительной степени бесполезны».Большим недостатком нового API-интерфейса является то, что он требует установки более новых JRE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...