Нет, преимущество использования FileInputStream
не превышает URLConnection
(ну, если вы не подсчитываете миллисекунды нескольких дополнительных вызовов метода).
Чтение файла через URL-адрес file://
в конечном итоге получает вас FileURLConnection
(обратите внимание, что это не часть официальной спецификации библиотеки Java, а только JRE на основе Sun). Если вы посмотрите на код, вы увидите, что он создает FileInputStream
для работы с файлом на диске. Так что, кроме прохода нескольких слоев дальше в стеке, код заканчивается точно так же.
Причина, по которой вы хотите использовать FileInputStream
, является для ясности вашего кода. Включение пути к файлу в URL-адресе немного уродливое, и было бы сложно сделать это, если бы вы только когда-либо работали с файлами.
В вашем случае, когда вы потребность работать с URL-адресов часть времени, это очень удобно, что вы можете использовать файл URL и только работы с URL. Я предполагаю, что вы отвлекли почти всю интересную логику для работы с URL-адресами и можете делать уродливое дело по созданию файла или не-файла URL-адреса в другом месте.
Спасибо за подробный технический ответ о том, как он работает под капотом! Да, в настоящее время модуль настроен на прием URL-адресов, поэтому ему не нужно знать, где находится файл. – user1941747