小编Fel*_*ler的帖子

中断BufferedReader#readLine()而不关闭InputStream

InputStream我的Process应该安装和拆卸每当用户希望看到这一点.附着工作正常,但分离失败.中断该readLine()方法的默认答案始终是关闭流,但我不能在这种情况下或Process将完成或至少不可用于将来的附件.这是流的读取方式:

BufferedReader reader = new BufferedReader(new InputStreamReader(getProcess().getInputStream()));
String line;

while ((line = reader.readLine()) != null) {
    System.out.println(line);
}
Run Code Online (Sandbox Code Playgroud)

为了分离,我尝试了一些东西:

  • 关闭任何流,失败:close方法阻塞并等待readLine()
  • 实现另一个流来发送null/abortion值SequenceInputStream,失败:当一个人InputStream在等待输入时,另一个甚至没有被调用
  • 使用反射解锁read()任何流内的方法,失败:不确定原因,但没有工作.我们应该继续这个尝试吗?这是源代码:

    try {
    
        Field modifiers = Field.class.getDeclaredField("modifiers");
        modifiers.setAccessible(true);
    
        Field fdecoder = stream.getClass().getDeclaredField("sd");
        fdecoder.setAccessible(true);
        modifiers.setInt(fdecoder, 1);
        StreamDecoder decoder = (StreamDecoder) fdecoder.get(stream);
    
        Field flock = decoder.getClass().getSuperclass().getDeclaredField("lock");
        flock.setAccessible(true);
        modifiers.setInt(flock, 1);
        Object lock = (Object) flock.get(decoder);
    
        synchronized (lock) {
            lock.notifyAll();
        }
    
    } catch (NoSuchFieldException | IllegalAccessException e) …
    Run Code Online (Sandbox Code Playgroud)

java process stream

10
推荐指数
1
解决办法
467
查看次数

标签 统计

java ×1

process ×1

stream ×1