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