有一个问题想请问一下: 
在这个例子中: 
import java.io.* ; 
public class streamdemo{ 
public static void main(String[] args){ 
try{ 
System.out.print("INPUT: "); 
System.out.println(System.in.read()); 

catch(IOException e){} 


即System.out.println(System.in.read()); 变成 System.out.write(System.in.read()); 
如果我在键盘上输入'A',原先的会显示出65,这是由于A的GBK编码把'A'转换成一个字节的编码了,而这个编码的十进制数值是65. 
1)可为什么变成 System.out.write(System.in.read()); 后,什么输出都没有了,连65都不输出了,更别说再输出'A'了。这是什么原因? 
2)还有一个问题,就是在手册上说inputstream的read()方法,读入一个byte,而返回一个int, 一个int 是4个byte,那是不是说在读入‘A'后,在流中实际是00 00 00 65四个byte啊?
3)那是不是说用outputstream的write方法,没有办法输出inputstream.read()输入的内容,在不用buffer的情况下?

解决方案 »

  1.   

    [code=Java]
    回答:
    (1):Java会给流提供缓冲,因为你之写入一个字节,因此该字节还在缓冲区中,因此不予输出,你在其后加上System.out.flush();即可;
    (2):read从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值,因此流中不是四个字节,而是一个字节;
    (3):有办法,加System.out.flush()即可。
    补充:
    print()方法按照平台的默认字节编码将 String.valueOf(int) 生成的字符串转换为字节,并完全以 write(int) 方法的方式写入这些字节。 
    [code]
      

  2.   


    回答: 
    (1):Java会给流提供缓冲,因为你之写入一个字节,因此该字节还在缓冲区中,因此不予输出,你在其后加上System.out.flush();即可; 
    (2):read从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值,因此流中不是四个字节,而是一个字节; 
    (3):有办法,加System.out.flush()即可。 
    补充: 
    print()方法按照平台的默认字节编码将 String.valueOf(int) 生成的字符串转换为字节,并完全以 write(int) 方法的方式写入这些字节。 
      

  3.   

    该从新看下J2SE 的东西忘球啦