Java: File.toURI () .toURL () на файле Windows

Ориентированный на многопотоковое исполнение в Java 5 +:

class Foo {
    private static volatile Bar bar = null;
    public static Bar getBar() {
        if (bar == null) {
            synchronized(Foo.class) {
                if (bar == null)
                    bar = new Bar(); 
            }
        }
        return bar;
    }
}
<час>

РЕДАКТИРОВАНИЕ : Обратите внимание на volatile модификатор здесь.:) Это важно, потому что без него, другие потоки, как гарантирует JMM (Модель памяти Java), не будут видеть изменений в ее значении. Синхронизация не делает , заботятся о том - она только сериализирует доступ к тому блоку кода.

РЕДАКТИРОВАНИЕ 2 : ответ @Bno детализирует подход, рекомендуемый Bill Pugh (FindBugs), и является спорным лучше. Пойдите чтение и проголосуйте за его ответ также.

16
задан hippietrail 8 August 2012 в 07:23
поделиться

2 ответа

That's an interesting question.

First things first: I get the same results on JRE6. I even get that when I lop off the toURL() part.

RFC2396 does not actually require two slashes. According to section 3:

The URI syntax is dependent upon the scheme. In general, absolute URI are written as follows:

:

Having said that, RFC2396 has been superseded by RFC3986, which states

The generic URI syntax consists of a hierarchical sequence of omponents referred to as the scheme, authority, path, query, and fragment.

 URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

 hier-part = "//" путь к авторитету-abempty
 / путь-абсолютный
 / path-rootless
 / путь-пустой

Схема и компоненты пути требуется, хотя путь может быть пустым (без символов). Когда авторитет присутствует, путь должен быть пустым или начинаются с символа косой черты ("/"). Когда авторитета нет, путь не может начинаться с двух косых черт символы ("//"). Эти ограничения привести к пяти различным правилам ABNF для пути (раздел 3.3) только один из который будет соответствовать любому заданному URI ссылка.

Итак, поехали. Поскольку URI файлов не имеют сегмента полномочий, им запрещено начинаться с //.[1216 impression Однако этот RFC не появлялся до 2005 года, а Java ссылается на RFC2396, поэтому я не знаю, почему он следует этому соглашению, как URL-адреса файлов до нового RFC всегда имели две косые черты.

12
ответ дан 30 November 2019 в 22:50
поделиться

Что касается его использования в браузер обеспокоен, это не имеет значения. Обычно я видел file: /// ... но один, два или три '/' будут работать. Это заставляет меня думать (не глядя на документацию по java), что это было бы нормальным поведением.

1
ответ дан 30 November 2019 в 22:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: