何竹冬 发表于 2013-1-9 16:37 你好 可以使用Scanner类啊,直接读取基本数据类型 Scanner scan = new Scanner(System.in);
QQ截图20130110095901.png (11.86 KB, 下载次数: 95)
黑马吕世成 发表于 2013-1-10 10:03 DataInput适用于读取用接口 DataOutput 的 writeInt 方法写入的字节。 因为这个流读取的是二进制流,读取 ...
何伟 发表于 2013-1-10 23:37 不是亦Scanner这个类么? Scanner sc = new Scanner(System.in); 在用sc调用next这些方法就ok ...
何伟 发表于 2013-1-10 23:37 不是亦Scanner这个类么? Scanner sc = new Scanner(System.in); 在用sc调用next这些方法就ok ...
public final int readInt() throws IOException {
int ch1 = in.read();
int ch2 = in.read();
int ch3 = in.read();
int ch4 = in.read();
if ((ch1 | ch2 | ch3 | ch4) < 0)
throw new EOFException();
return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
}
知道了读取数据的原理,开始说从命令行读取数据了。其实从命令行输入的任何内容都是以字符串的形式存在,我们从主函数的参数列表就可以发现(String args[])。所以表面上你是输入了一个数字,如:11,123。但实际上是字符串,字符串和整数在这里的区别就很大了,因为占用的内存空间不一样。
如属入:11 ,字符串——占用两个字节;整数——占用四个字节。
还有最后一点我需要说明的就是读取内容的问题:
一般我们典型的读取命令行输入用的是BufferedReader:Reader bufr = new BufferedReader(new InputStreamReader(System.in)) ;通过readerLine方法读取。
因为readLine方法可以读取整行,将Enter将屏蔽了(我姑且这么说,底层怎么实现视频里讲的很清楚了!),所以能够一行一行读取。
但是用DataInputStream就不会这样,他会将你输入的所有字符读入,这里就包含了Enter键,Enter键在windos系统对应的就是字符串/r/n(回车换行两个)。
下面我来解释上图张输入的问题了,因为对enter键也会读取,所以也要注意光标出现的位置。你如果看到这张图你就能自己推出我输入了什么,我想你已经明白了这其中的道理。
图片里我把流程都说了一遍。自己好好看看。如果还不是很清楚可以再qq上一起交流下。(710896696 哈哈,顺便推荐哈自己,装B了!!)
不知道图片你看的清楚不,我不知道会是什么效果。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |