Come sono aggiornati il limite di Java ByteBuffer e la variabile di posizione?

2

Esistono due scenari: scrittura e lettura
Scrittura :
Ogni volta che scrivo qualcosa sul ByteBuffer chiamando il suo metodo put(byte[]) la variabile position viene incrementata come: current position + size of byte[] e limit rimane al massimo.
Se, tuttavia, inserisco i dati in un buffer di visualizzazione, dovrò, manualmente, calcolare e aggiornare il position
Prima chiamo il metodo write(ByteBuffer) del canale per scrivere qualcosa, dovrò flip() del Bytebuffer in modo che
position punti a zero e limit punti all'ultimo byte che è stato scritto sul ByteBuffer .
lettura :
Ogni volta che chiamo il metodo read(ByteBuffer) di un canale per leggere qualcosa, la variabile position rimane a 0 e la variabile limit di ByteBuffer punta all'ultimo byte letto. Quindi, se ByteBuffer è inferiore al file letto, la variabile limit viene trasferita a max
Ciò significa che ByteBuffer è già capovolto e posso procedere all'estrazione dei valori dal ByteBuffer.
Per favore, correggimi dove sono sbagliato :)

    
posta Dummy Derp 11.09.2012 - 05:26
fonte

1 risposta

2

Ogni volta che leggi o scrivi sul buffer, solo le sue modifiche di posizione.

Quindi hai torto a leggere dal canale. Nota che leggere dal canale significa scrivere nel buffer. Puoi impostare la posizione su 0 e limitare - al numero massimo di byte per leggere prima che chiami Channel.read(ByteBuffer) . L'operazione di lettura aggiorna quindi la posizione sul numero di byte effettivamente letti. Quindi, per iniziare a leggere dal buffer devi chiamare ByteBuffer.flip() .

    
risposta data 11.09.2012 - 10:27
fonte

Leggi altre domande sui tag