基本上,我已经为自己编写了一些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以错误的方式插入到缓冲区中(我非常怀疑是后者)
如果出现问题,您认为是什么原因?
答案 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()
,您是否覆盖了它?
但是我没有重写它作为答案。全部归功于他。