Причина: java.io.IOException: Неработающая труба [дубликат]

quick-json parser очень прост, гибкий, очень быстрый и настраиваемый. Попробуйте

Особенности:

  • Соответствует спецификации JSON (RFC4627)
  • Высокопроизводительный анализатор JSON
  • Поддерживает гибкие / Настраиваемый подход синтаксического анализа
  • Конфигурируемая проверка пар ключ / значение любой иерархии JSON
  • Прост в использовании # Очень малая занимаемая площадь
  • Повышает дружественность и легко отслеживает исключения
  • Поддержка подключаемых пользовательских валидаций - Ключи / значения могут быть подтверждены путем настройки настраиваемых валидаторов по мере и когда встречаются
  • Поддержка проверки и неавтоматизации парсера
  • Поддержка двух (JSON / XML) для использования проверяющего парсера с быстрым JSON
  • Требуется JDK 1.5
  • Нет зависимости от внешних библиотек
  • Поддержка JSON Генерация через объект serialization
  • Поддержка выбора типа коллекции во время процесса синтаксического анализа

Его можно использовать следующим образом:

JsonParserFactory factory=JsonParserFactory.getInstance();
JSONParser parser=factory.newJsonParser();
Map jsonMap=parser.parseJson(jsonString);

72
задан MC Emperor 8 March 2014 в 12:24
поделиться

3 ответа

Сломанная трубка просто означает, что соединение не выполнено. Разумно предположить, что это невозможно восстановить, а затем выполнить любые необходимые действия по очистке (закрытие соединений и т. Д.). Я не верю, что вы когда-нибудь увидите это просто из-за того, что соединение еще не завершено.

Если вы используете неблокирующий режим, то метод SocketChannel.connect вернет false, и вам понадобится использовать методы isConnectionPending и finishConnect, чтобы убедиться, что соединение завершено. Я обычно кодировал бы на основе ожидания того, что все будет работать, а затем поймать исключения для обнаружения сбоя, а не полагаться на частые вызовы на «isConnected».

19
ответ дан jsight 26 August 2018 в 08:33
поделиться

Вы должны предположить, что розетка была закрыта на другом конце. Заверните свой код с помощью блока catch catch для IOException.

Вы можете использовать isConnected (), чтобы определить, подключен ли SocketChannel или нет, но это может измениться до завершения вызова write (). Попробуйте вызвать его в своем блоке catch, чтобы убедиться, что на самом деле именно поэтому вы получаете исключение IOException.

1
ответ дан Sean A.O. Harney 26 August 2018 в 08:33
поделиться

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

isConnected() не обнаруживает это условие. Только запись делает.

разумно всегда вызывать SocketChannel.isConnected () перед попыткой SocketChannel.write ()

Это бессмысленно. Соединитель сам подключен к . Вы подключили его. То, что не может быть не подключено, является самим соединением, и вы можете только определить это, попробовав его.

83
ответ дан user207421 26 August 2018 в 08:33
поделиться
Другие вопросы по тегам:

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