package com.jenkov.nioserver; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; /** * Project: java-nio-server
* File: Socket.java
* Created: 16 Oct 2015
* * @author jjenkov */ public class Socket { public long socketId; public SocketChannel socketChannel; public IMessageReader messageReader; public MessageWriter messageWriter; public boolean endOfStreamReached; public Socket(SocketChannel socketChannel) { this.socketChannel = socketChannel; } public int read(ByteBuffer byteBuffer) throws IOException { int bytesRead = socketChannel.read(byteBuffer); int totalBytesRead = bytesRead; while (bytesRead > 0) { bytesRead = socketChannel.read(byteBuffer); totalBytesRead += bytesRead; } if (bytesRead == -1) endOfStreamReached = true; return totalBytesRead; } public int write(ByteBuffer byteBuffer) throws IOException { int bytesWritten = socketChannel.write(byteBuffer); int totalBytesWritten = bytesWritten; while (bytesWritten > 0 && byteBuffer.hasRemaining()) { bytesWritten = socketChannel.write(byteBuffer); totalBytesWritten += bytesWritten; } return totalBytesWritten; } }