Clearing-ein ByteBuffer

Sehr einfaches problem: ich lese aus einem SocketChannel und möchte schreiben die Ergebnisse auf ein anderes SocketChannel. Ich bin über einen Selektor-Objekt, so dass ich warten, bis einer der SocketChannel lesbar ist, dump die Daten in einen ByteBuffer, und dann, wenn die nächste SocketChannel beschreibbar ist, habe ich einen dump der ByteBuffer es. OK so weit. Es wird jedoch nicht angezeigt, gibt es eine Möglichkeit, eigentlich "klar" einen ByteBuffer, so kann ich das nicht jede Art von überprüfen, um zu wissen, Wann neue Daten da sind.

Ich ausprobiert habe .clear () - Methode, aber, dass anscheinend nicht klar, das Puffer -, sondern nur setzt die buffer-position 1.

Hier einige Beispiel-code:

ByteBuffer channel1buf = ByteBuffer.allocate(1024);
ByteBuffer channel2buf = ByteBuffer.allocate(1024);

if (key.isReadable()) {
    if (key.channel().equals(channel1)) {
        channel1.read(channel2buf);
    } else if (key.channel().equals(channel2)) {
        channel2.read(channel1buf);
    }
} else if (key.isWritable()) {
    if (key.channel().equals(channel1) && channel1buf.asCharBuffer().length() > 0) {
        channel1.write(channel1buf);
        /* some way to clear channel1buf */
    } else /* same idea for channel2... */
}
  • Sollten Sie die ByteBuffer als Anhang während der Registrierung von Kanal zu dem Selektor (Dritter parameter der regsiter-Methode), so können Sie abrufen, die Anlage aus der SelectionKey und vermeiden Sie alle verschachtelten if-Klauseln.
InformationsquelleAutor user1241397 | 2012-02-29
Schreibe einen Kommentar