ilosc pobranych bajtow

0

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?

0

Tak:
Klasa UrlConnection.getInputStream()
Interfejs InputStream.read() i czytasz po bajcie w pętli co ileś tam kroków zwiększasz licznik i tyle.

0

niestety ten InputStream trafia od razu do parsera XML i nie moge czytac po bajcie
Reader reader = new InputStreamReader(_in);

0

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.

0

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);
0

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();
    }   
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1