Расположение потоков в Java

В C# я почти всегда использую using шаблон при работе с потоковыми объектами. Например:

using (Stream stream = new MemoryStream())
{
    // do stuff
}

При помощи using блок, мы удостоверяемся, чтобы расположили, сразу назван на потоке после того, как тот бок кода выполняется.

Я знаю, что Java не имеет эквивалента a using ключевое слово, но мой вопрос то, что при работе с объектом как a FileOutputStream в Java мы должны сделать какое-либо обслуживание, чтобы удостовериться, что это расположено? Я смотрел на этот пример кода, и я заметил, что они не делают никого.

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

9
задан Martin Prikryl 23 September 2019 в 05:47
поделиться

3 ответа

Вы просто должны поместить этот кодекс в cellForRowAtIndexPath

, Чтобы отключить собственность выбора клетки: (выявляя клетку)

cell.selectionStyle = UITableViewCellSelectionStyleNone;

, Чтобы включить способности выбрать (выявляют) клетку: (укол клетки)

// Default style
cell.selectionStyle = UITableViewCellSelectionStyleBlue;

// Gray style
cell.selectionStyle = UITableViewCellSelectionStyleGray;

Примечание, что клетка с selectionStyle = UITableViewCellSelectionStyleNone; все еще заставит UI звонить didSelectRowAtIndexPath, когда он затронут пользователем. Чтобы избежать этого, сделайте, как предложено ниже, и установите.

cell.userInteractionEnabled = NO;

вместо этого. Кроме того, следует задать для cell.textLabel.enabled = NO; серый цвет предмета.

-121--556487-

Кроме того, не создает скрипты bin для различных платформ. maven-assembly-plugin может создавать (пакеты (пакеты )) {tar.gz, застежка -молния}) для распространения. Они настраиваются через assemble.xml. Вы указываете, какие файлы входят (с какими параметрами (chmod)) и т.д. Он также может фильтровать файлы (искать/заменять значения в них). и т.д.

-121--3375383-

обычно необходимо сделать следующее:

InputStream stream = null;
try {
   // IO stuff - create the stream and manipulate it
} catch (IOException ex){
  // handle exception
} finally {
  try {
     stream.close();
  } catch (IOException ex){}
}

Но apache commons-io предоставляет IOutils.closeQuietly (поток); , которое помещено в наконец , чтобы сделать его немного менее уродливым. Я думаю, что в Java 7 будет некоторое улучшение.

Обновление: Джон Скит сделал очень полезное замечание о том, что фактическое обращение с исключением редко возможно в самом классе (если только оно просто не регистрируется, но на самом деле оно не обрабатывается). Так что вам лучше объявить ваш метод бросить это исключение вверх, или обернуть его в пользовательское исключение (за исключением простых, атомных операций).

9
ответ дан 4 December 2019 в 13:01
поделиться

Если кому-то интересно, новый синтаксис в Java 7 может быть следующим:

do (BufferedInputStream bis = ...; BufferedOutputStream bos = ...) {
   ... // Perform action with bis and bos
}

(см. предложение Джошуа Блоха )

Это тема, связанная с на переполнении стека .

2
ответ дан 4 December 2019 в 13:01
поделиться

В Java (к сожалению) нет эквивалента оператора using, хотя были некоторые мысли о включении чего-то подобного в Java 7. (Кажется, в последний раз, когда я смотрел, они "вышли", но мне трудно следить за статусом функций в Java 7. )

В основном вам нужен блок try/finally:

InputStream stream = new FileInputStream(...);
try { 
    ...
} finally {
    stream.close();
}

Затем возникает проблема, что делать с IOException в случае неудачи close(), и проблема исключения, которое "перезаписывает" любое исключение, выброшенное основной частью кода - хотя последнее является проблемой и в .NET.

Guava делает это немного проще с помощью класса Closeables со статическими методами close и closeQuietly, которые справляются с тем, что stream является null (в случае, когда вы объявляете переменную до блока, но присваиваете значение внутри блока try).

4
ответ дан 4 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

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