先举两个例子
文件是自己随便写的一个文件,可以自己设置一下,内容包括中英文和数字
首先要明确一点,InputStream读取数据的格式为二进制数据
在这里用 temp=input.read() 读取,那么int格式的temp实际上内容为二进制数据
但是,int可以表示二进制数据所以不冲突,还有一点:
为什么InputStream.read()读取一个byte却返回一个int?
InputStream.read()实际上返回一个unsigned byte[0~255],而java中无此类型,只能用int接收(byte[-128~127]),而且read()返回值中还有对“-1”的要求,更不能实用byte来接收了,所以实用int接收数据。
再有byte数组和String分别代表不同的数据,专门服务于不同的目的
String在java是字符数组,他的字符是实用Unicode字符来构建的
String s=new String(byteArray)
把数组byteArray[] 的值初始化给了s,所以s是一个把byte类型的数据转化为Unicode字符数组的字符串
这样就可以理解二进制数据转换为汉字的原因
关于char
import java.io.*;
public class T1 {
public static void main (String[] args) throws Exception {
File file=new File("E:"+File.separator+"垃圾文件.txt");
InputStream input=new FileInputStream(file);
int temp;
while((temp=input.read())!=-1){
System.out.print((char)temp);
}
input.close();
System.out.println("读取结束!");
}
}
import java.io.*;
public class T2 {
public static void main (String[] args) throws Exception {
File file=new File("E:"+File.separator+"垃圾文件.txt");
InputStream input=new FileInputStream(file);
byte data[]=new byte[10];
int foot=0;
int temp=0;
while((temp=input.read())!=-1){
data[foot++]=(byte)temp;
}
input.close();
System.out.println(new String(data,0,foot));
}
}