java 关于一个小InputStream程序的问题。

来源:百度知道 编辑:UC知道 时间:2024/07/04 12:12:56
import java.io.*;
public class Test {
public static void main(String[] args) {
FileInputStream in = null;
try {
in = new FileInputStream("c:\\Test.java");
} catch (FileNotFoundException e) {
System.out.println("The File can't be found!");
System.exit(-1);
}
int b;
long num = 0;
try {
while((b = in.read())!= -1) { // A
System.out.print((char)b);
num ++;
}
in.close();

} catch (IOException e1) {
System.out.println("Erro when loading the file....");
System.exit(-1);
}
System.out.println();
System.out.println("The size of this file is: " + num);
}
}

C:/Test.java就是当前这个程序代码。为什么将A句改为
while((in.read())!= -1) {
b = in.read();
就运行时,就显示一堆乱七八糟的字母?而如果不改,就是会正常显示。
谢谢你们!今天发现这样写也可以呵呵int b = in.read();
while(b != -

你分析下打印出来的“乱七八糟”的字母你会发现一个规律:打印出来的字母在文件中的位置都是偶数。也就是2,4,6,8,,,,等位置上的字母。
原因在于:
while((in.read())!= -1) { (1)
b = in.read(); (2)
你的语句(1)读取了一个字母,然后你的语句(2)读取的是下个位置上的字母,然后你打印出来的始终是后一个字母。

支持yljf1314 - 初入江湖 三级的说法
同时 认为 b应该被定义为字节型 因为 read返回的是字节型
byte[] b=new byte[1024];
int len=0;
len=in.read(b);
System.out.print(new String(b,0,len));