Warum heißt die flip () -Methode von ByteBuffer "flip"? Was ist hier "umgedreht"? Laut Apidoc werden zwei aufeinanderfolgende Flips den ursprünglichen Zustand nicht wiederherstellen, und mehrere Flips werden wahrscheinlich dazu neigen limit()
, Null zu werden.
Kann ich irgendwie "umdrehen", um die Wiederverwendung von Bytes zu überschreiten?
Kann ich den Schwanz verketten, um ihn mit anderen Daten umzudrehen?
java
flip
bytebuffer
Suzan Cioc
quelle
quelle
reset
stattdessen zum Umblättern zum Schreiben zum Lesen .Antworten:
Ein ziemlich häufiger Anwendungsfall für das
ByteBuffer
besteht darin, eine Datenstruktur Stück für Stück zu erstellen und dann die gesamte Struktur auf die Festplatte zu schreiben.flip
wird verwendet, umByteBuffer
von "Lesen von E / A" (put
ting) zu "Schreiben in E / A" (get
ting) zu wechseln: Nachdem eine Folge vonput
s zum Füllen des verwendet wirdByteBuffer
,flip
wird die Grenze des Puffers auf die aktuelle Position gesetzt und setzen Sie die Position auf Null zurück. Dies hat den Effekt, dass eine Zukunft erstellt wirdget
oderwrite
aus dem Puffer allesput
in den Puffer geschrieben wird und nicht mehr.Nach Abschluss des
put
können Sie das wiederverwendenByteBuffer
, um eine andere Datenstruktur zu erstellen. Rufen Sie auf, um die Funktion zu "entklappen"clear
. Dadurch wird die Begrenzung der Kapazität (wodurch der gesamte Puffer verwendet werden kann) und die Position auf 0 zurückgesetzt.Ein typisches Nutzungsszenario:
quelle
out
?write(ByteBuffer)
Methode hat. (Es ist nicht wirklich relevant, was sein Typ ist ...)Buffer.clear
die Reset-Grenze auf Kapazität und Position auf 0Buffer.reset
zurücksetzen. Nur Position auf zurücksetzenmark
.Flip weist der Limit-Eigenschaft den aktuellen Positionswert zu und setzt die Positionseigenschaft auf 0. Flip ist nützlich, um nur aktive Elemente aus einem Puffer zu entleeren.
Das folgende Programm druckt beispielsweise "Hallo", nicht leere Pufferelemente. Limit und Position für Methodenaufrufe können durch Flip ersetzt werden.
Weitere Informationen zu Puffern und Kanälen finden Sie unter http://www.zoftino.com/java-nio-tutorial .
quelle
ByteBuffer ist schlecht gestaltet. Es gibt viele Beschwerden von anständigen Programmierern.
Versuchen Sie also nicht, darüber nachzudenken, sondern studieren und verwenden Sie die API sorgfältig.
Jetzt kann ich es nicht schlecht machen, ohne eine Alternative vorzustellen, also hier ist es:
Ein Puffer hat einen festen
capacity
; Es werden 2 Zeiger beibehalten:start
undend
.get()
Gibt das Byte an derstart
Position zurück und erhöht esstart
.put()
Setzt das Byte an dieend
Position und erhöht esend
. Neinflip()
!quelle
Die Methode flip () bereitet einen Puffer für eine neue Sequenz von Kanalschreib- oder relativen Abrufoperationen vor: Sie setzt die Grenze auf die aktuelle Position und setzt dann die Position auf Null.
Der Puffer verfolgt die darin geschriebenen Daten. Nach dem Schreiben wird die flip () -Methode aufgerufen, um vom Schreib- in den Lesemodus zu wechseln.
quelle