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