Java 可以插入到中的InputStream
是否可以使Java 可以插入到中的InputStream,java,concurrency,io,Java,Concurrency,Io,是否可以使InputStream与基本InputStream相同,只是当基本流被阻塞时,可以通过调用方法将字节插入流中?草图: public class HackInputStream extends InputStream { public HackInputStream (InputStream base) { /* stuff */ } public int read() throws IOException { /* stuff */ } public void
InputStream
与基本InputStream
相同,只是当基本流被阻塞时,可以通过调用方法将字节插入流中?草图:
public class HackInputStream extends InputStream {
public HackInputStream (InputStream base) { /* stuff */ }
public int read() throws IOException { /* stuff */ }
public void insertByte(byte b) { /* stuff */ }
}
我只会在基本流被阻塞时插入字节,所以竞争条件不应该成为问题。我尝试使用一个线程来实现这个类,该线程贪婪地将字节从基流读取到LinkedBlockingQueue
insertByte
将字节直接插入队列,而read
只是从队列中读取字节,在队列为空时阻塞
这几乎奏效了。。。但是,当我使用新扫描仪(new HackInputStream(System.in)
)制作扫描仪时,nextLine
方法不起作用。不幸的是,我想要这个奇怪的类的第一个原因是解除阻止扫描仪的锁定
(以下是我试图解决的问题,以防有人有更好的解决方案:
我的程序是一个“shell”,在给定命令时启动任务(线程)。其中一些任务会自行终止,而另一些则不会。我希望在任务终止时立即返回命令提示符,但如果任务从未终止,我希望通过输入换行符来终止它
当前,主线程等待任务终止,而看门狗线程等待换行符,如果收到换行符,则终止任务。现在,如果任务自行终止,我无法在不手动输入换行符的情况下输入命令。看门狗线程被不间断地阻止,它将使用下一行输入no不管怎样,可能会导致下一个命令未读。我正在尝试更改System.in
,以便以编程方式为其换行。)更新:如果任务仍在运行,我只需调用Scanner.nextLine()
就可以用一种简单得多的方法解决问题