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