2013-07-30 5 views
2

Непосредственно из этого сканера API:Нужно ли закрывать сканер, когда нет потока?

String input = "1 fish 2 fish red fish blue fish"; 
    Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*"); 
    System.out.println(s.nextInt()); 
    System.out.println(s.nextInt()); 
    System.out.println(s.next()); 
    System.out.println(s.next()); 
    s.close(); 
+1

Это хорошая практика всегда закрывать ваши ресурсы ressources, которые вы выполняете с ними, или компилятор будет жаловаться и бормотать ошибки об утечках памяти. – hayonj

ответ

2

Я не думаю, что это так, но это лучше в любом случае, чтобы закрыть его в случае, если вы измените свой код, чтобы использовать поток. Это также хорошая привычка, в которую вы действительно хотите попасть.

3

Сначала мы делаем наши привычки; то наши привычки делают нас.

Я бы сказал, что поток течет, потому что укоренилась привычка, как закрытие ресурсов в блоках finally.

1

Не будет утечки ресурсов, если мы не закроем Scanner String. Внутренне new Scanner(String) создает StringReader в качестве основного источника, когда мы закрываем Scanner, он закрывает StringReader, что не дает никакого эффекта.

0

Если вы хотите Сканер быть помечен как закрытый (так что все последующие операции на объекте не получится сразу), то вы должны вызвать Scanner.close().

0

Я считаю, что это хорошая идея использования scanner.close(); Я говорю это, потому что это предотвратит утечку ресурсов, и если вы сделаете это привычкой, то это будет очень полезно для вас.