Где хранятся данные при заполнении bytearray

Я использую неблокирующий serversocket. Я выделил размер ByteArray как 100. Затем клиент отправляет данные размером 200 байт на сервер, сервер получает 200-байтовое сообщение как данные 100 байт + 100 байт. Мой вопрос: после чтения 100 байт из канала, где оставшиеся 100 байт данных хранятся до повторного вызова read(). Спасибо (извините, если какая-то ошибка грамматика)

серверная программа:

public class SelectorExample {

    public static void main (String [] args)
        throws IOException {

        // Get selector
        Selector selector = Selector.open();

        System.out.println("Selector open: " + selector.isOpen());

        // Get server socket channel and register with selector
        ServerSocketChannel serverSocket = ServerSocketChannel.open();

        InetSocketAddress hostAddress = new 
        InetSocketAddress("131.10.20.16", 5454);
        serverSocket.socket().bind(hostAddress,0);
        serverSocket.configureBlocking(false);
        int ops = serverSocket.validOps();
        SelectionKey selectKy = serverSocket.register(selector, ops, null);

        for (;;) {
            System.out.println("Waiting for select...");
            int noOfKeys = selector.select();
            System.out.println("Number of selected keys: " + noOfKeys);
            Set selectedKeys = selector.selectedKeys();
            Iterator iter = selectedKeys.iterator();

            while (iter.hasNext()) {
                SelectionKey ky = (SelectionKey)iter.next();
                if (ky.isAcceptable()) {                     
                // Accept the new client connection
                SocketChannel client = serverSocket.accept();
                client.configureBlocking(false);

                // Add the new connection to the selector
                client.register(selector, SelectionKey.OP_READ);

                System.out.println("Accepted new connection from client: " + client);                     
            }
            else if (ky.isReadable()) {

                // Read the data from client
                SocketChannel client = (SocketChannel) ky.channel();
                ByteBuffer buffer = ByteBuffer.allocate(100);
                int i =client.read(buffer);
                String output = new String(buffer.array());

                System.out.println("Message read from client: " + output);

                if (i == -1) {
                    client.close();
                    System.out.println("Client messages are complete; close.");
                }

            } // end if (ky...)

            iter.remove();

        } // end while loop

    } // end for loop
}

person jagadeesh k    schedule 01.05.2017    source источник
comment
Это дает вам хорошее описание: Память процесса?   -  person Erwin Bolwidt    schedule 01.05.2017
comment
В сокете TCP буфер приема в ядре или сетевой стек   -  person user207421    schedule 01.05.2017
comment
@EJP Есть ли ограничение по времени для чтения из буфера в ядре или сетевом стеке ??   -  person jagadeesh k    schedule 01.05.2017
comment
Нет, если одноранговый узел не сбросит соединение. Почему ты спрашиваешь? NB вы должны проверить -1 перед печатью сообщения, и когда вы печатаете сообщение, вы должны использовать new String(buffer.array(), 0, buffer.position());   -  person user207421    schedule 02.05.2017
comment
@EJP я понял. Благодарность   -  person jagadeesh k    schedule 02.05.2017