Я недавно сделал это, поэтому у меня нет опыта работы с ним, но я использовал HTTPCLient. HTTPClient делает несколько вещей лучше, чем необработанные URLConnections, и наиболее важным в этом случае является то, что он повторяет попытки три раза, если не может подключиться к серверу. Это помогает, если у вас просто дрянное соединение с потерей пакета.
Я также анализирую InputStream с SAX, но оборачиваю InputStream в BufferedReader (используя промежуточный InputStreamReader). Я понятия не имею, если SAX делает это внутренне, но из моего опыта, BufferedStreams работают значительно лучше, чем небуферизованные потоки. С помощью обычного InputStream вы делаете запрос на чтение для каждого байта, который только увеличивает вероятность проблем с сетью, если у вас дрянное соединение. Буферизованные потоки будут считывать в буфере количество байтов на чтение (я думаю, что я установил мой в 1024, но вы можете попробовать другие значения, чтобы увидеть, что работает лучше для вас).
Надеюсь, это поможет.