подскажите пожалуйста почему мы создаем массив buffer, размер которого указываем в байтах и передаем этот массив в переменную типа int read = inputstream.read(buffer)? как работает данное выражение ? мы туда его передали, чтоб записать туда считанное из файла? или как? и почему именно массив?
Anonymous #3153706
20 уровень
Как это работает?
Обсуждается
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
6 декабря 2022, 07:38
Такой вот метод существует в классе InputStream, читает байты из стрима в переданный массив байтов и возвращает количество прочитанных байтов.
Можешь открыть в идее сам метод, почитать более подробное описание.
Или тут https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read(byte[])
0
Anonymous #3153706
6 декабря 2022, 16:51
Спасибо за доступный ответ. И еще хотел спросить про цикл while, а точнее про выражение while (inputStream.available() >0)
int real = inputStream.read(buffer);
output.write(buffer, 0, real);
Здесь происходит считывание по одному байту, передаем этот байт в массив и сразу же с массива записываем на исходящий поток? если так, то для чего нам массив? ведь тогда не происходит запись всех байтов в массив с последующей передачей полного массива в поток...? как это понять? буду ждать ответа. Спасибо за уделенное время.
0
ГоффMaster
6 декабря 2022, 20:26
Здесь происходит считывание не по байту, а сразу кучей. Метод inputStream.read(buffer) не только считывает из входного потока сразу много байт и закидывает их в массив buffer (что очень сильно ускоряет процесс считывания, иногда в тысячи раз!), но и возвращает количество считанных байт, которое сохраняется в переменной read. Если в потоке байт больше, чем влезает в буфер, то, понятное дело, read = размеру буфера. Но если в потоке осталось меньше, то будет возвращено фактическое количество считанных байт.
Поэтому здесь отслеживается количество считанных байт, что бы не записать лишнего на выходе. Предположим, размер буфера 10, в потоке 25 байт
Считали 10, записали на выход 10
считали 10, записали на выход 10
считали оставшиеся 5, записали на выход 5
+1