A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘伟平 中级黑马   /  2012-10-20 22:33  /  2417 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘伟平 于 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.         }
复制代码
这样的语句对吗?

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

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
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(); // 必须要关闭输入流
}
}
回复 使用道具 举报
语法上没错,
但是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 方法的常规协定。
回复 使用道具 举报
对于基本数据输入流,我是这样理解的,DataInputStream里面的数据源是你键盘输入的字节数组,而你用readInt()方法读出的是一个32位的数字,也就是4个字节,因此前面可能会有空格,具体你可以在api比较readInt()方法和read()方法里面返回的数字位数就清楚了
回复 使用道具 举报
qhasilver 发表于 2012-10-20 23:05
DataInputStream 得到的是字节流,需要转换之后才能得到正确的字符。

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

                return Integer.parseInt(bufr.readLine());
这两句确实解决了,看来DataInputStream是有局限性的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马