Это значением согласно Документация PHP .
По умолчанию, аргументы функции передаются значением (так, чтобы, если значение аргумента в функции изменяется, это не становилось измененным за пределами функции). Чтобы позволить функции изменять свои аргументы, они должны быть переданы ссылкой.
Для имения аргумента функции, всегда передаваемой ссылкой, предварительно ожидайте амперсанд ( & ) к имени аргумента в функциональном определении.
Я бы использовал commons-io CountingInputStream , который сделает всю работу за вас. Полный, но тривиальный пример:
public long countContent(URL feedurl) {
CountingInputStream counter = null;
try {
HttpURLConnection con = (HttpURLConnection) feedurl.openConnection();
counter = new CountingInputStream(con.getInputStream());
String output = IOUtils.toString(counter);
return counter.getByteCount();
} catch (IOException ex) {
throw new RuntimeException(ex);
} finally {
IOUtils.closeQuietly(counter);
}
}
Вы можете расширить FilterInputStream
, переопределив чтение ()
, read (byte [], int, int)
и skip
методы, чтобы после вызова формы super
они обновляли счетчик с количеством прочитанных байтов.
Затем оберните входной поток, возвращаемый URLConnection
, одним из них, и используйте оболочку вместо исходного потока. Когда вы закончите, вы можете запросить его счетчик оболочки.
Другие («ручные») подходы будут использовать такой инструмент, как YSlow для сбора статистики в браузере или Wireshark для проверки трафика в сети.