Zadna magie. Hodnota reference b neni zmenena, je jen prepsan obsah
pole. To si clovek musi pripravit predem a predat ho metode.
S pozdravem
        Ondřej Nekola



2011/4/4 Libor Jelinek <ljeli...@virtage.com>:
> 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