java - 在运行时转换 NIO channel

标签 java android nio

我有一个类实现“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/

相关文章:

java - 如何遍历一个json对象的所有子节点?

java - 更新 JTextField 的内容以便它不断刷新所有内容?

javascript - Cordova PhoneGap 从 2.2.0 升级到 5.1.1

android - 带有长文本的 TextView 会将其他 View 推离屏幕

android - AccountManager 和 OAuth - 如何添加帐户?

java - 多个方法调用内部测试方法

android - 使自定义 Android SurfaceView 透明

java - 是否可以在 java.nio(或常规 java io)中 fork (克隆)流?

java - 为什么ByteBuffer.allocate()和ByteBuffer.allocateDirect()之间的奇异性能曲线差异

java - Java NIO 是如何分解消息的?