Je to taka Cckoidna filozofia (,,dam ti pointer a ty mi napln jeho obsah"), ale principialne s tym nie je problem, kedze pole sa odovzdava referenciou a da sa nan pozerat ako na svojsky druh objektu.

Tato metoda robi dve veci: jednak nacitava data do pola a jednak hovori, kolko bajtov sa nacitalo (v navratovej hodnote) a zaroven indikuje -1kou, ze nastal koniec prudu.

Neviem ako rozumnejsie by sa obe informacie dali vratit tak, aby API nebolo komplikovane.

RN

On 4. 4. 2011 12:55, Libor Jelinek wrote:
Dobrý den,
dnes další "jobovka" :-) Jak je možné, že read() z potomků InputStream používá něco co by se v jiných jazycích nazvalo výstupní parametry nebo předávání parametrů referencí (ByRef např. ve VB). Java přeci nic takového nemá. Vše je předáváno metodám "ByVal", tedy hodnotou.

Tak jak to může např.
/      FileInputStream.read(byte[] b)/
mít v JavaDocu napsáno
/      @param      b   the buffer into which the data is read./

Obecně jako nováček bych čekal, že read bude vrácet byte[], nikoli, že mi načtené pole bajtů bude změneno v proměnné předané hodnotou (což není možné přece...).
/
/Když se podívám na zdrojáky, tak se nedostanu dále, než že to využívá JNI v signaturách metod, např.: /private native int readBytes(byte b[], int off, int len) throws IOException;/
/
/Přiznávám, že JNI neznám a nikdy jsem nepoužíval. To je díky tomu? Nebo co je to za "magii"? :-)

Díky
Libor

Odpovedet emailem