Java流阅读器一直阻塞到流结束

时间:2018-08-18 07:53:30

标签: java buffer java.util.scanner inputstream

基本上,我已经为自己编写了一些InputStream(供System.in进一步使用),它可以接收和使用Swing组件加载的缓冲区。

注意:出于调试目的插入了打印语句。

read()方法:

@Override
public int read() {
    System.out.print("[READ] Querying buffer... ");
    while(this.buffer.isEmpty());
    int val = buffer.poll(); // Consumes the first element
    System.out.format("done - 0x%x\n",  val);
    return val;
}

从流WORKS中读取原始字节:

InputStream input = new TestStream();
int chunk = 0;
while(chunk != '\n') {
    chunk = input.read();
    System.out.format("Byte: 0x%x", chunk);
}
input.close();

输出:

[Read] Querying buffer... done - 0x4c
Byte: 0x4c
...
Byte: 0x a

0x a是NL字符(是的,我在Unix之类的系统上)

当向流提供附加数据时,它输出消耗的字符,而在不提供时阻塞。

但这不起作用:

InputStream input = new TestStream();
Scanner scn = new Scanner(input);
System.out.println("Line: " + scn.nextLine());
scn.close();
input.close();

此方法仅消耗输入流中的所有可用数据,并阻塞直到流的末尾(read()返回-1)为止。要么似乎完全忽略了流中的NL字符,要么是将NL以错误的方式插入到缓冲区中(我非常怀疑是后者)

如果出现问题,您认为是什么原因?

1 个答案:

答案 0 :(得分:0)

k5_已经在他的评论中指出了答案:

  

扫描仪不使用gzip_proxied any gzip_types text/plain text/css text/js text/xml text/javascript application/javascript application/x-javascript application/json application/xml application/rss+xml image/svg+xml; 方法。它使用read(),您是否覆盖了它?

但是我没有重写它作为答案。全部归功于他。