我正在编写一个非常简单的网络库,以便将来可以用于其他项目。现在,我无法处理阅读操作。我有一个负责处理来自SocketChannels的事件的类,它还包含输入和输出缓冲区。要初始化缓冲区,您需要定义它的大小。所以默认情况下,所有缓冲区的大小都是1024字节。
我遇到的问题是,如果我读取的数据包大于1024字节,我会得到一个异常。这可以通过默认分配更大的缓冲区来解决(例如2048字节,而不是1024),但这似乎是简单的方法,我特别不喜欢该解决方案。
我想出的解决方案是创建一个非常大的直接静态缓冲区(它的大小是Short.MAX_VALUE)。所有来自SocketChannels的数据将被读入大缓冲区,然后复制到较小的缓冲区中(如果缓冲区不适合数据,缓冲区将被扩展)。
我只是担心,不断清理数据并将数据放入大量的“结转”缓冲区可能会有很大的代价。如果有类似SocketChannel.available()的东西,我会喜欢它,但唯一最接近的替代方法是Socket.getInputStream()。available(),但该方法会阻塞。这样我会扩大输入缓冲区(而不是大的),如果有更多的可用数据比缓冲区可以适应。不幸的是,我不能 - 所以我能想到的唯一解决方案就是我上面提到的那个。
我来这里要问......你们中的任何一位明智的人有没有更好的解决方案?另外,我不想使用外部库 - 这只是个人偏好。
提前感谢!
我的道歉。在与一位密友交谈后,我意识到从一开始就没有问题。这是一个很长的解释,所以我不会解释它。我道歉。 h2>
海报注意:请不要删除问题文本。它为其他人提供指导。