gpt4 book ai didi

java - 在运行时转换 NIO channel

转载 作者:行者123 更新时间:2023-12-02 06:32:46 24 4
gpt4 key购买 nike

我有一个类实现“Runnable”以从数据流中读取数据。数据来自 Channel,它作为成员变量存储在我的另一个类中,我只需调用 getter getInputChannel() 即可获取此 channel 的实例。现在,为了让我的 Runnable 从 channel 读取数据,它需要知道 channel 是什么类型,以便它可以使用 channel 的 read 方法。 channel 类型可以是 FileChannelSocketChannel 之一,并在运行时决定,即

private class ReadInputStream implements Runnable {

Thread thread;
boolean running = true;
ByteBuffer buffer = ByteBuffer.allocate(1024);

FileChannel or SocketChannel channel;

public ReadInputStream() {
// Need to cast type channel at run time
Channel ch = getInputChannel();
this.channel = (FileChannel or SocketChannel) ch;
}

public void run() {
while (running) {
channel.read(buffer);
// etc.
}
}

}

获得正确类型的 channel 以便我可以在可运行对象的 run() 方法中实现其 read 方法的最佳方法是什么?

最佳答案

FileChannel 和 SocketChannel 均实现 ByteChannel这是声明其 read(ByteBuffer) 方法的内容,因此这就是您的 getInputChannel() 应返回的类型。

编辑 或者,如果您只从 channel 中阅读过内容,请返回 ReadableByteChannel正如达霍格所说。由于这是一个输入 channel ,因此很可能是这种情况。

关于java - 在运行时转换 NIO channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19931836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com