1. 程式人生 > >byte陣列和int,char,String的關係以IO例

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)); } }