SocketChannel получает массив байтов, который пуст, а затем получает заполненный массив байтов. - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь создать неблокирующий сервер сокетов и отправил сериализованный объект с клиента через сокет на сервер.Сервер получает пустой байтовый массив, но затем заполненный байтовый массив с сериализованным объектом.

final int value = channel.read(buffer);

if(value == -1){
    throw new IOException("End of stream");
}

final byte[] bytes = new byte[buffer.remaining()];

buffer.get(bytes, 0, bytes.length);

buffer.clear();

Код, который я использовал для сериализации объекта:

public static byte[] serialize(Object object) throws IOException {
    final ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    final ObjectOutputStream stream = new ObjectOutputStream(byteStream);

    stream.writeObject(object);
    final byte[] bytes = byteStream.toByteArray();
    stream.close();
    byteStream.close();

    return bytes;
}

Есть два выхода, которыеисходить из этого кода, байтовый массив, который является пустым, и байтовый массив, который заполняется сериализованным объектом.Сначала я получил пустой байтовый массив, затем следовал заполненный байтовый массив.

1 Ответ

0 голосов
/ 04 февраля 2019

Благодаря комментарию пользователя 207421, проблема была решена.Щелчок буфера был решением.

...