日期:2014-05-20  浏览次数:20958 次

关于FileInputStream中的read()

import java.io.*;
public class test {

public static void main(String[] args) {

int b=0;
FileInputStream f=null;
try{
f=new FileInputStream("D:/test.txt");
}catch(FileNotFoundException e){
System.out.println("file not found");
System.exit(-1);
}

try{
long num=0;
while((b=f.read())!=-1)
{
System.out.print((char)b);
num++;
}
System.out.println();
System.out.println("一共读取:"+num+"字节");
}catch(IOException e){
System.out.print("file read error!");
System.exit(-1);
}
}

}



该程序为读取txt文件中的内容然后输出

txt文件内容:
123456asdfadsf
asdfadsf
ergtsdfsdfg
sdfgs
fgsdfgs


输入内容为:
123456asdfadsf
asdfadsf
ergtsdfsdfg
sdfgs
fgsdfgs

一共读取:57字节


FileInputStream 中的read()方法 :从此输入流中读取一个数据字节。

而java中的字符用的是unicode编码的,每个字符都是用两个字节表示的 

我的问题是: 用read()方法读取一个字节后 然后输出 为什么不会出错?

例如 我读取'a'这个字符的话 'a'=\u0097  读了前面一个字节 00 然后输出 00 相应的字符 ,然后读取 97 再输入97相应的字符'a'  这个是我的想法 可是出来的结果却不是这样的 而只有那个中文字 才会输出两个字符,望各位大神解答。 谢谢

------解决方案--------------------
引用:
Quote: 引用:

ascii码中一个字符对应一个数字,这个数字范围0-255,8位二进制数字。如你所说97 对应了a,00对应什么?可能啥都没有。所以不会出错。汉字是在ascii码表示范围之外,会乱码




import java.io.*;
public class test {

public static void main(String[] args) {
                int a=0;
System.out.println((char)a);
}

}

单独打印0 怎么出现了个正方形  还有程序的输出应该多一倍的字符(小正方形)  可是为什么没有的?

我查了一下,ascii码中00表示null,什么都没有,输出的小方框,我感觉是eclipse工具显示的原因。小方框没有对应的ascii码。倒是在乱码的时候经常出现。