黑马程序员技术交流社区

标题: io流的问题 [打印本页]

作者: 章闽    时间: 2012-10-24 19:58
标题: io流的问题
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();的话,又是错的
作者: 唐进    时间: 2012-10-24 20:31
你这个字节定义了十个长度,它相当于是用一个可以装10个字节的盒子去装你输入的值,如果用ba=stdin.read()读的话它是一个一个字节读,然后赋值给ba,所以你用数组去接收的话会报错
作者: 毛标    时间: 2012-10-24 20:53
首先可以在API中查看read()有1个是里面的参数是BYTE数组,你定义了一个数组并将这个数组作为参数,就意味着使用这个方法的时候他会自动将读到的字节存到这个数组中,你如果改为ba=stdin.read();这个方法返回的是这个字节对应的int数值,你用数组ba去接收一定会报错的
作者: 毛标    时间: 2012-10-24 20:53
首先可以在API中查看read()有1个是里面的参数是BYTE数组,你定义了一个数组并将这个数组作为参数,就意味着使用这个方法的时候他会自动将读到的字节存到这个数组中,你如果改为ba=stdin.read();这个方法返回的是这个字节对应的int数值,你用数组ba去接收一定会报错的
作者: 刘丽娜    时间: 2012-10-24 21:20

说的很有的道理啊  学习了
作者: 林志进    时间: 2012-10-24 23:25
        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一起配合使用




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