Java - Что бросает IOException

java.io.IOException представляется наиболее распространенным типом исключения, по совпадению он также представляется наиболее неоднозначным. Я продолжаю видетьthrows IOException когда пишете с сокетами, файлами и т. д. Однако на самом деле я никогда не стрелял в меня, поэтому мне интересно, что же такое, что должно вызывать исключение. Документация не очень помогает объяснить, что происходит:

Сигналы о том, что произошло какое-то исключение ввода / вывода. Этот класс является общим классом исключений, созданных неудачными или прерванными операциями ввода-вывода.

Может кто-нибудь объяснить, пожалуйста, некоторые случаи, когда IOException будет выброшен, или как он должен использоваться.