Java - o que gera uma IOException

java.io.IOException parece ser o tipo mais comum de exceção, coincidentemente, parece ser também o mais ambíguo. Eu continuo vendo othrows IOException sempre que escrever com sockets, files, & c. Eu nunca realmente tive um disparou contra mim, no entanto, eu estou querendo saber o que é que deveria disparar a exceção. A documentação não ajuda muito a explicar o que está acontecendo:

Sinaliza que ocorreu uma exceção de E / S de algum tipo. Esta classe é a classe geral de exceções produzidas por operações de E / S com falha ou interrompidas.

Alguém pode, por favor, explicar alguns casos em que uma IOException seria lançada ou como ela deveria ser utilizada.