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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 章闽 中级黑马   /  2012-10-24 19:58  /  1414 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;
public class aa
{
  public static void main( String[ ] args )
  {
    byte[] ba = new byte[10];
    InputStream stdin = System.in;//这句貌似上转型
    System.out.println("Please input a string: ");
    try{
        stdin.read(ba);  
    }catch(IOException ie){
         System.out.println();
    }
    String s = new String(ba);
    System.out.println("The string read in is "+ s);
  }
}   
System.in.read中,read函数只能一次读一个字符,为什么那句可以得到整个字符串? 如果改为ba=stdin.read();的话,又是错的

评分

参与人数 1黑马币 +12 收起 理由
谭立文 + 12

查看全部评分

5 个回复

倒序浏览
你这个字节定义了十个长度,它相当于是用一个可以装10个字节的盒子去装你输入的值,如果用ba=stdin.read()读的话它是一个一个字节读,然后赋值给ba,所以你用数组去接收的话会报错
回复 使用道具 举报
首先可以在API中查看read()有1个是里面的参数是BYTE数组,你定义了一个数组并将这个数组作为参数,就意味着使用这个方法的时候他会自动将读到的字节存到这个数组中,你如果改为ba=stdin.read();这个方法返回的是这个字节对应的int数值,你用数组ba去接收一定会报错的

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
首先可以在API中查看read()有1个是里面的参数是BYTE数组,你定义了一个数组并将这个数组作为参数,就意味着使用这个方法的时候他会自动将读到的字节存到这个数组中,你如果改为ba=stdin.read();这个方法返回的是这个字节对应的int数值,你用数组ba去接收一定会报错的

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报

说的很有的道理啊  学习了
回复 使用道具 举报
        InputStreamReader stdin = new InputStreamReader(System.in);// 读取字符就用字符流,读取数据就用字节流
                System.out.println("Please input a string: ");
                char[] c = new char[10];
                try {
                        int x = stdin.read(c, 0, 10);
                        System.out.println(new String(c, 0, x));
                } catch (IOException ie) {
                }
//如果是一直输入的话就用buffferedreader 和 while一起配合使用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马