黑马程序员技术交流社区

标题: 能用System.in的流有哪些? [打印本页]

作者: 刘伟平    时间: 2012-10-20 22:33
标题: 能用System.in的流有哪些?
本帖最后由 刘伟平 于 2012-10-21 09:07 编辑
  1. public static int getInt() throws Exception
  2.         {
  3.                 DataInputStream dis = new DataInputStream(System.in);
  4.                 return dis.readInt();
  5.         }
复制代码
这样的语句对吗?

我运行后确实可以等待输入数据,但是输出的数字大的离谱,并不是我输入的个位数。

作者: qhasilver    时间: 2012-10-20 23:05
DataInputStream 得到的是字节流,需要转换之后才能得到正确的字符。
  1. import java.io.BufferedReader;
  2. import java.io.DataInputStream;
  3. import java.io.InputStreamReader;

  4. public class TestIn {
  5.         public static int getInt() throws Exception {
  6.                 DataInputStream dis = new DataInputStream(System.in);
  7.                 return Integer.parseInt(dis.readLine());//readLine方法已过时,API中标注无法正确将字节数据转换为字符数据,推荐以下被注释掉的两行代码
  8.                 //BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  9.                 //return Integer.parseInt(br.readLine());
  10.         }
  11.         public static void main(String[] args){
  12.                 try {
  13.                         System.out.println(getInt());
  14.                 } catch (Exception e) {
  15.                         e.printStackTrace();
  16.                 }
  17.         }

  18. }
复制代码

作者: 草上飞    时间: 2012-10-21 00:19
import java.io.InputStream;

public class SystemDemo04 {
// 抛出异常
public static void main(String[] args) throws Exception {
  InputStream input = System.in; // 从键盘接收数据
  byte b[] = new byte[1024]; // 开辟内存空间,接收数据
  System.out.print("请输入内容:");
  int len = input.read(b); // 接收从键盘输入的数据
  System.out.println("输入的内容为:" + new String(b, 0, len));
  input.close(); // 必须要关闭输入流
}
}
作者: 新立    时间: 2012-10-21 00:37
语法上没错,
但是DateInputStream 数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型,不能操作对象。同时这个一般不用做输入的,多数情况应该和 DataOutputStream一起用。

而且读取文本行的首选方法是使用 BufferedReader.readLine() 方法

以下是api中的方法说明,
已过时。 该方法无法将字节正确转换为字符。从 JDK 1.1 开始,读取文本行的首选方法是使用 BufferedReader.readLine() 方法。使用 DataInputStream 类读取文本行的程序可以改为使用 BufferedReader 类,只要将以下形式的代码:
     DataInputStream d = new DataInputStream(in);
替换为:
     BufferedReader d= new BufferedReader(new InputStreamReader(System.in));

参见 DataInput 的 readLine 方法的常规协定。
作者: 唐进    时间: 2012-10-21 00:40
对于基本数据输入流,我是这样理解的,DataInputStream里面的数据源是你键盘输入的字节数组,而你用readInt()方法读出的是一个32位的数字,也就是4个字节,因此前面可能会有空格,具体你可以在api比较readInt()方法和read()方法里面返回的数字位数就清楚了
作者: 刘伟平    时间: 2012-10-21 09:03
qhasilver 发表于 2012-10-20 23:05
DataInputStream 得到的是字节流,需要转换之后才能得到正确的字符。

                BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

                return Integer.parseInt(bufr.readLine());
这两句确实解决了,看来DataInputStream是有局限性的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2