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));
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值