Поток - это поток байтов, вы не можете спросить его, сколько байтов осталось, вы просто читаете из него, пока он не скажет «я готов». Теперь, в зависимости от того, как установлено соединение, обеспечивающее поток, , возможно, базовый протокол (например, HTTP) может заранее знать общую длину для отправки ... возможно, нет. Для этого см. URLConnection.getContentLength()
. Но вполне может вернуть -1 (= «Я не знаю»).
Кстати, ваш код не является правильным способом для чтения потока байтов и записи его в файл. Во-первых, вы используете Writer
, когда вы должны использовать OutputStream
(вы конвертируете из байтов в символы, а затем обратно в байты - это снижает производительность и может повредить все, если полученный контент является двоичным, или если кодировки не совпадают). Во-вторых, неэффективно читать и записывать по одному байту за раз.