byte数组和int,char,String的关系以IO例

先举两个例子
文件是自己随便写的一个文件,可以自己设置一下,内容包括中英文和数字

首先要明确一点,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));
    }
}

猜你喜欢

转载自blog.csdn.net/guohaocan/article/details/80979438
今日推荐