'Short read' means that the client has lost the connection with the server. These can be very hard to diagnose, particularly when they're intermittent and the transfers are huge.
Have you implemented a robust retry strategy? In particular, I'd recommend reconnecting and resuming the transfer from where you left off. This is more tricky than usual for you since you're processing a stream in real-time, but it shouldn't be too hard. FTPInputStream has a constructor that takes an offset, so you just need to set that to the size of the remote file when you resume. Since you're (presumably) parsing lines of text, you'll need to buffer any uncompleted lines of text between retries so that you can prefix them to the first line of the resumed stream.
I realise this does directly answer the question that you asked, but for file-transfers as large as that, having a robust retry strategy is really essential since you can't stop interruptions occurring entirely.