jak wiadomo
connection.getHeaderField("Content-Length");
zwróci rozmiar danych ktore maja byc pobrane w bajtach
czy da sie sprawdzic ile juz pobrano z tego pliku?
jak wiadomo
connection.getHeaderField("Content-Length");
zwróci rozmiar danych ktore maja byc pobrane w bajtach
czy da sie sprawdzic ile juz pobrano z tego pliku?
Tak:
Klasa UrlConnection.getInputStream()
Interfejs InputStream.read() i czytasz po bajcie w pętli co ileś tam kroków zwiększasz licznik i tyle.
niestety ten InputStream trafia od razu do parsera XML i nie moge czytac po bajcie
Reader reader = new InputStreamReader(_in);
Czyli jeżeli dobrze domniemuję praserowi podajesz adres URL i chcesz do środka dostawiś swój kod? Co to za biblioteka jest jeśli możesz podać. Może da się częściowo napisać to inaczej, ale musze się kilka rzeczy dowiedzieć z np javadoca.
to bilbioteka kxml, a mniej wiecej tak to wyglada..
connection = (HttpConnection) Connector.open(_url);
connection.setRequestMethod(HttpConnection.POST);
// tu nadawanie atrybutow POST'a i jeszcze na tym etapie moge wywolac sobie to connection.getHeaderField("Content-Length");
Reader reader = new InputStreamReader(connection.openInputStream());
XmlParser parser = new XmlParser(reader);
Zamiast zwykłej klasy InputStreamReader możesz użyć własnego jej rozszerzenia. (ewentualnie dekoratora)
public class InputStreamReaderBytesCountPrint extends InputStreamReader {
int count = 0;
public InputStreamReaderBytesCountPrint(InputStream stream){
super(stream);
}
@Override
public int read() throws IOException {
int ret = super.read();
if (ret != -1){
System.out.println(++count);
}
return ret;
}
@Override
public int read(char[] buf, int offset, int len) throws IOException {
int ret = super.read(buf, offset, len);
if (ret > 0){
count += ret;
System.out.println(count);
}
return ret;
}
}
Wersja z dekoratorem:
public class BytesCountPrintReader extends Reader {
final private Reader reader;
int count = 0;
public BytesCountPrintReader(Reader reader){
this.reader = reader;
}
@Override
public int read() throws IOException {
int ret = reader.read();
if (ret != -1){
System.out.println(++count);
}
return ret;
}
@Override
public int read(char[] buf, int offset, int len) throws IOException {
int ret = reader.read(buf, offset, len);
if (ret > 0){
count += ret;
System.out.println(count);
}
return ret;
}
@Override
public void close() throws IOException {
reader.close();
}
}