Gehen "asynchronousSocketchannel.Write" und "Read" -Methoden einen Speicherzaun an, bevor sie die "CompletionHandler" -MJava

Java-Forum
Anonymous
 Gehen "asynchronousSocketchannel.Write" und "Read" -Methoden einen Speicherzaun an, bevor sie die "CompletionHandler" -M

Post by Anonymous »

Bei Verwendung von asynchronousSocketchannel.Write , um eine Nachricht zu übertragen,

Code: Select all

    class Transmitter(channel: AsynchronousSocketChannel) {
def transmit(bytes: Array[Byte])(onComplete: Consumer[String]): Unit = {
val buffer = ByteBuffer.wrap(bytes)

object handler extends CompletionHandler[Integer, Null] {
override def completed(result: Integer, attachment: Null): Unit = {
if result == 0 then onComplete.accept("Failure: connection closed prematurely")
else if buffer.hasRemaining then channel.write(buffer, null, handler)
else onComplete.accept("Successful")

}

override def failed(exc: Throwable, attachment: Null): Unit = onComplete.accept("Failure: connection error")
}
channel.write(buffer, null, handler)
}
}
Die Methode von CompletionHandler. Um diesen Fall zu verarbeiten, sollte die abgeschlossene asynchronousSocketchannel.Write erneut aufrufen, oder? In einem anderen Thread der NIO2-Gruppe ausgeführt, und in der Dokumentation der Puffer < /code> besagt, dass es sich nicht um threadssicher handelt (seine Zustandsvariablen sind nicht einmal flüchtig).
Ich sehe also keinen Weg So senden Sie den verbleibenden Inhalt des Puffer, ohne den Puffer zu lesen, und es kann nicht zuverlässig gelesen werden. Sequentiell aufgerufen), aber eine Sichtbarkeit: Der Thread, der die abgeschlossene -Methode ausführt abgeschlossen die a Vorzeit

Code: Select all

read
interne Methoden. ). tun oder nicht, müssen flüchtig sein.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post