SocketChannel接收为空的字节数组,然后接收填充的字节数组

时间:2019-02-03 21:39:38

标签: java nio bytebuffer socketchannel

我试图创建一个非阻塞套接字服务器,并且我从客户端通过套接字向服务器发送了序列化对象。服务器接收到一个空字节数组,然后接收一个带有序列化对象的填充字节数组。

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 :(得分:0)

由于user207421的评论,此问题已解决。翻转缓冲区就是解决方案。