如何将 InputStream 自定义为 JSch channel.setInputStream 方法?

How to custom InputStream to JSch channel.setInputStream method?

我想使用自定义数据源,例如来自远程套接字的数据,以在 JSch 中显式设置 InputStream,例如:

class MySocket {
  def onReceive(f: Byte => Unit) = ???
}
val socket: MySocket = ...
socket.onReceive(byte => {
  //put byte to MyCustomInputStream and get by JSch channel.
  ...
});

val channel = session.openChannel("shell").asInstanceOf[ChannelShell]
channel.setInputStream(MyCustomInputStream) 
channel.setOutputStream(System.out)
channel.connect(6 * 1000)
....

如何实现MyCustomInputStreamclass?
谢谢

经过一些测试,我发现如果此处没有输入,它应该会阻止读取线程,代码段如下:

object MyInputStream extends InputStream {
  val readLock = new AnyRef
  var readFlag = false
  var data = ArrayBuffer.empty[Byte]
  data.append("ls\n".map(_.toByte): _*)
  new Thread(() => {
    Thread.sleep(5 * 1000)

    data.append("pwd\n".map(_.toByte): _*)
    readied = true
    lock.synchronized(lock.notify())

  }).start()

  var dataIndex = 0

  val lock = new AnyRef
  var readied = true
  override def read(): Int = {
    if(!readied) {
      lock.synchronized(lock.wait())
    }
    val rst = if(dataIndex < data.length) {
      val a = data(dataIndex)
      dataIndex += 1
      a
    }
    else {
      readied = false
      -1

    }


    println("read - " + rst)

    rst
  }
}

注意:data应该用ByteBuffer或其他可变数据结构进行细化。