DataInputStream a = new DataInputStream(System.in);
int b = a.readInt();
System.out.println(b);当我输入数字12并回车的时候,输出什么呢?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【tteesstt】截止到2008-07-30 08:56:01的历史汇总数据(不包括此帖):
    发帖的总数量:138                      发帖的总分数:8900                     每贴平均分数:64                       
    回帖的总数量:95                       得分贴总数量:11                       回帖的得分率:11%                      
    结贴的总数量:138                      结贴的总分数:8900                     
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=tteesstt
      

  2.   

    输出什么没意义.这玩意似乎是拿来进行持久化类的.
    理由在API DOCS 上面有.读取四个输入字节并返回一个 int 值。设 a 为第一个读取字节,b 为第二个读取字节,c 为第三个读取字节,d 为第四个读取字节。返回的值是:  
     (((a & 0xff) << 24) | ((b & 0xff) << 16) |
      ((c & 0xff) << 8) | (d & 0xff))
     此方法适用于读取用接口 DataOutput 的 writeInt 方法写入的字节。 
      

  3.   

    肯定不是12,至于多少就要测试过了。
    因为你输入内容是当作字符串的,所以12会变成3132的十六进制来传递。你读取的是int,就是读取4个字节,而输入的只有两个字节,系统会补上什么应该会和系统有关吧。一般好像是你输入的换行符,windows默认好像是\r\n。
    那么你获取的int的16进制数应该是31320D0A
      

  4.   

     int readInt()
    返回此输入流的下四个字节,将它们解释为一个 int。 
      

  5.   

    readInt()会读取4个字节,你输入12后回车,程序读取了字符1(ASCII 49) 字符2(ASCII 50) 回车符(ASCII 13) 换行符(ASCII 10)
    然后计算((49 << 24) + (50 << 16) + (13 << 8) + (10 << 0))就得到了结果 825363722!
      

  6.   

    代码:import java.io.DataInputStream;
    import java.io.IOException;public class Tteesstt { public static void main(String[] args) throws IOException {
    DataInputStream a = new DataInputStream(System.in);
    int b = a.readInt();
    System.out.println(b);
    }}输入:12输出:825363722分析:下面是 java.io.DataInputStream.readInt() 方法的源代码: 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));
    }其中 in 是包装入此 DataInputStream 的输入流,也就是这里的 System.in,而 readInt 方法里的 in.read() 在代码中也就相当于 System.in.read() 了。剩下的请看下面代码的运行结果:import java.io.IOException;public class Test { public static void main(String[] args) throws IOException {
    System.out.println("1, 2, \\r, \\n 这四个 Unicode 字符编码值的二进制形式如下:");
    System.out.printf("%1$32s\n", Integer.toBinaryString((int)'1'));
    System.out.printf("%1$32s\n", Integer.toBinaryString((int)'2'));
    System.out.printf("%1$32s\n", Integer.toBinaryString((int)'\r'));
    System.out.printf("%1$32s\n", Integer.toBinaryString((int)'\n'));
    System.out.println();
    System.out.println("请输入 12 然后回车:");
    int a = System.in.read();
    int b = System.in.read();
    int c = System.in.read();
    int d = System.in.read();
    System.out.println("虽然感觉上我们只输入了两个字符 1 和 2,但实际上在这之后");
    System.out.println("还有两个字符即回车符 \\r 和换行符 \\n 也一同被输入进去了。");
    System.out.println("所以实际上一共输入了 4 个字符,其 Unicode 编码值的二进制形式如下:");
    System.out.printf("%1$32s\n", Integer.toBinaryString(a));
    System.out.printf("%1$32s\n", Integer.toBinaryString(b));
    System.out.printf("%1$32s\n", Integer.toBinaryString(c));
    System.out.printf("%1$32s\n", Integer.toBinaryString(d));
    System.out.println();
    System.out.println("剩下的就简单了,此源代码中的 4 次 System.in.read() 每次会");
    System.out.println("将一个字符 16 位编码值的低 8 位当作一个字节,前面补上 24 个 0 后凑够 32 位后");
    System.out.println("被当作一个 int 类型的值返回出来,所以上面四次 read() 读出的是 4 个字符低 8 位的二进制信息。");
    System.out.println("而楼主代码的输出结果是 825363722,它的二进制形式为:");
    System.out.println();
    System.out.printf("%1$32s\n", Integer.toBinaryString(825363722));
    System.out.println();
    System.out.println("这恰好是在 DataInputStream.readInt() 中将这 4 个字节数据拼成一个完整的 32 位整数的结果。");
    }}
      

  7.   

    肯定不是12,因为采用的是流的方式进行输入,当写入12写进流的时候将12转换为二进制数据,利用readInt进行读取的时候读前四个字节,12只有两个字节,故回车也被读出。