作者rps12369 (小董)
看板java
标题[问题] 关於键盘输入的概念的一个问题
时间Thu Jan 29 18:26:45 2009
後来打完发现...
我颜色用的有点花...
不过我是希望大家看得懂啦...所以才用颜色分别...
对不起看的人的眼睛啦..sorry捏
我之前用C语言好久了
对於JAVA的资料流概念不是很能适应
不知道有没有人能为我解释一下
在C语言中的键盘输入
是一个指令就一个输入 例如 scanf 指令
若是档案的资料流也是一个指令一个输入 例如 fscanf fgetc 之类的
不过我刚刚在尝试JAVA程式的键盘输入
程式码如下
import java.io.*;
public class BigNumberAdding
{
public static void main(String[] args) throws IOException
{
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
int c;
while(true)
{
c=br.read();
System.out.print((char)c + " ( " + c + " )\n");
}
}
}
不过当我执行的时候 我不能理解的是
例如我输入一个字串 abc
当然的 他会印出↓
abc
a ( 97 )
b ( 98 )
c ( 99 )
( 13 )
( 10 )
但是接下来的程式程序是
我能继续的再输入东西 例如再次输入 defgh 萤幕就会变成↓
abc
a ( 97 )
b ( 98 )
c ( 99 )
( 13 )
( 10 )
defgh
d ( 100 )
e ( 101 )
f ( 102 )
g ( 103 )
h ( 104 )
( 13 )
( 10 )
我的问题:
第一 关於这个Java程式的输入指令在哪里?
或许是我以前C语言的习惯@@?
我会用一道一道的指令去检视程式码在做什麽
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
这两行程式码应该只是在宣告?
就我的理解Java程式的概念是宣告一个Buffer的资料流并直接读取Buffer的内容
而这个Buffer的资料流是
System.in 这个键盘输入的Buffer
之後再由後面的无限回圈中的
c=br.read(); 读取这个Buffer并印出
那麽 照理说成是应该无限的读取与印出的动作才对
可是为什麽程式会是
→ 等待输入 → 读取缓冲 → 印出结果→┐
↑ ↑ │ │
│ └───────┘ │
└────────────────┘ (这是程式真实的状况)
就我的理解 无限回圈应该是上面紫色的部分
那个关於 输入的这个动作 是存在哪个指令当中? 为什麽也被包含在无限回圈当中?
那就更奇怪啦~~也就是我问题的症结点...
read()持续的读取字元直到读到 10 的这个结束字元
表示是无限回圈所造成的结果
那麽 到10结束後 应该就是无限读取空的Buffer
怎麽会是等待输入?
我唯一能想到的是 read() 包含输入缓冲 同时 监听键盘输入 的功能?
还是说我对於缓冲区的了解错了?
希望有人能为我解释一下
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.192.84.168
※ 编辑: rps12369 来自: 123.192.84.168 (01/29 18:28)
※ 编辑: rps12369 来自: 123.192.84.168 (01/29 18:30)
※ 编辑: rps12369 来自: 123.192.84.168 (01/29 18:31)
※ 编辑: rps12369 来自: 123.192.84.168 (01/29 18:36)
1F:推 TonyQ:br.read() 这个 method 是waiting for input stream 01/29 18:32
2F:推 jtmh:大致上可以想成是 C 的 getchar() 01/29 21:22
所以说...waiting for input stream
嗯...那也就是说
如果缓冲区是空的 那就会 waiting 也就是像j大所说的像是getchar
如果缓冲区不是空的 就会
解除暂停继续读取缓冲区和程式内容
是这样子吗@@?
※ 编辑: rps12369 来自: 123.192.84.168 (01/29 21:42)
※ 编辑: rps12369 来自: 61.230.90.19 (01/30 00:00)