我是 Socket 编程新手,我正在尝试编写一个简单的聊天应用程序。我的服务器利用字符串的 HashSet 来存储用户名信息,我想从服务器传递 HashSet
给客户。我之前可以通过常规套接字使用 ObjectOutputStream
和 ObjectInputStream
来完成此操作。但是,现在我使用 SocketChannel ,但它不允许这样做,我收到以下异常:
java.nio.channels.IllegalBlockingModeException
所以我在网上搜索了如何做到这一点,每个人都有不同的说法,而且大多数都超出了我的理解范围。有没有一种简单的方法可以做到这一点,而无需完全重写 writeObject 和 readObject 方法?
提前谢谢您。
最佳答案
我建议您不要使用非阻塞模式或不要使用序列化。
如果必须,您需要序列化为ByteArrayOutputStream
,获取长度,发送长度,发送字节,接收长度,继续读取,累积数据,直到获得正确的长度数据,将其放入 ByteArrayInputStream 中,并从中反序列化。这并不容易,尤其是挥手示意“继续阅读”。而且浪费时间和空间。
关于java - 通过 Java NIO 非阻塞 SocketChannel 写入和读取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42287518/