@Override
  public boolean read() throws IOException {
    if (!hasReceive()) {
      initializeNetworkReceive();
      metrics.transmissionRoundTripTime.update(time.milliseconds() - sendCompleteTime);
    }
    long startTimeMs = time.milliseconds();
    long bytesRead = networkReceive.getReceivedBytes().readFrom(socketChannel);
    long readTimeMs = time.milliseconds() - startTimeMs;
    logger.trace("Bytes read {} from {} using key {} Time: {}", bytesRead,
        socketChannel.socket().getRemoteSocketAddress(), getConnectionId(), readTimeMs);
    if (bytesRead > 0) {
      metrics.transmissionReceiveTime.update(readTimeMs);
      metrics.transmissionReceiveSize.update(bytesRead);
    }
    return networkReceive.getReceivedBytes().isReadComplete();
  }
Reads a sequence of bytes from the channel into the {@link NetworkReceive}

@return true if the read is complete, false otherwise
@throws IOException if some other I/O error occurs
ambry-network/src/main/java/com/github/ambry/network/PlainTextTransmission.java