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));
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章