论坛首页 入门技术论坛

你猜猜这段代码的结果

浏览 2256 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-08-22  
闲的无聊,随手写个小代码如下:

	public static void main(String[] args) {
			InputStream stream = System.in;
			try {
				FileOutputStream outStream = new FileOutputStream("E:/a.txt");
			
				byte [] data = new byte[2];
				int pos = 0;
				while (pos != -1) {
					pos = stream.read(data); 
					outStream.write(data);
					int size = stream.available();
					System.out.println("currut pos------------"+pos);
					System.out.println("available size------------"+size);
				}
				outStream.flush();
				outStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				System.out.println("========closed==============");
				stream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
	}


问题一:输入12345会输出什么结果?
问题二:E:/a.txt中会有输入的12345保存吗?
问题三:"========closed=============="这句话会打印出来吗?

每回答一个问题说明理由,回答问题的前提是不要运行此程序,回答完再运行~
   发表时间:2009-08-22  
难道太简单了吗?各位看客!
0 请登录后投票
   发表时间:2009-08-25  
答案应该全是否定的,具体原因应该出在 pos = stream.read(data);,具体就不知道了
0 请登录后投票
   发表时间:2009-09-03  
zhy20045923 写道
答案应该全是否定的,具体原因应该出在 pos = stream.read(data);,具体就不知道了

你的理解不够准确,既然该贴被评为新手帖,就让我了解这件事情吧!
先贴出执行结果:
12345
---------currut pos--------2
---------avalible size--------5
---------currut pos--------2
---------avalible size--------3
---------currut pos--------2
---------avalible size--------1
---------currut pos--------1
---------avalible size--------0
首先我们输入的12345加一个回车,那么对instream执行的aviliable(),实际上是7位,但是第一次打印出的为什么是5呢?这个新问题的答案也是解释为什么这段程序没有结束的答案。
最重要的原因是:InputStream stream = System.in;
当程序第一次进入while循环时因为System.in这个线程在wite,所以我们的执行线程也进入到wade状态,直到我们有输入,这时根据代码,直接执行read,读取2个byte,所以接下来的可读byte为5,当然说到这里,这个程序不退出也就一目了然了。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics