位元組流與字元流

2021-10-08 22:34:50 字數 4680 閱讀 9186

inputstream:位元組輸入流

public int read(byte b,int off,int len){}

outputstream:位元組輸出流

public void write(byte b,int off,int len){}

fileoutputstream:public void write(byte b)//一次寫多個位元組,將b陣列中所有位元組寫出輸出流。

public class testfileoutputstream 

//3關閉

fos.close();

}}

fileinputstream:public int read(byte b)//從流中讀取多個位元組,將讀到內容存入b陣列,返回實際讀到的位元組數;如果達到檔案的尾部,則返回-1。

public class testfileinputstream 

讀取多個位元組

byte buf=new byte[1024];

int len=0;

while((len=fis.read(buf))!=-1)

//3關閉流

fis.close();

}}

緩衝流:bufferedoutputsream/bufferedinputstream

作用:提高io效率,減少訪問磁碟的次數;

資料儲存在緩衝區中,flush是將快取區的內容寫入檔案中,也可以直接close。

public class testbufferedoutputstream 

//3關閉:預設重新整理,並關閉節點流

bos.close();

// try (outputstream ostream = fos)

}}

public class testbufferedinpustream 

讀取多個位元組

byte buf=new byte[1024];

int len=0;

while((len=bis.read(buf))!=-1)

//3關閉,關閉緩衝流,自動關閉節點流

bis.close();

}}

public class address implements cloneable

public address()

public string getcity()

public void setcity(string city)

public string getarea()

public void setarea(string area)

@override

public string tostring() ';

}@override

protected object clone() throws clonenotsupportedexception

}

public class person implements externalizable,cloneable 

public person()

public string getname()

public void setname(string name)

public int getage()

public void setage(int age)

public address getadd()

public void setadd(address add)

@override

public string tostring() ';

}@override

public void writeexternal(objectoutput out) throws ioexception

@override

public void readexternal(objectinput in) throws ioexception, classnotfoundexception

@override

public object clone() throws clonenotsupportedexception

}

/

* 把person物件使用物件流寫入硬碟中。序列化

* 要求:(1)序列化的類必須實現serializable(自動序列化介面)或externalizable(手動序列化介面)

* (2)序列化的類要新增乙個私有的long型別靜態常量:serialversionuid,保證序列化的類反序列化的類是同乙個類。

* 注意實現:

* (1)使用transient修飾的屬性,不可以序列化

* (2)靜態屬性不能序列化

* * 面試題:使用transient的屬性一定不能序列化嗎? 能 , 使用 externalizable 實現。

*/public class serializabledemo

/*** 序列化

* @throws exception

*/public static void writeobject() throws exception

/*** 反序列化

* @throws exception

*/public static void readobject() throws exception

system.out.println(person.country);

//3關閉

ois.close();

}}

reader:字元輸入流

public int read(char b,int off,int len){}

public void write(char c){}

filewriter:public void write(string str)//一次寫多個字元,將b陣列中所有字元寫入輸出流。

public class testfilewriter 

//3關閉

fw.close();

}}

filereader:public int read(char c)//從流中讀取多個字元,將讀到內容存入c陣列,返回實際讀到的字元數;如果達到檔案的尾部,則返回-1;

public class testfilereader 

讀取多個字元

char buf=new char[1024];

int len=0;

while((len=fr.read(buf))!=-1)

//3關閉

fr.close();

}}

緩衝流:bufferedwriter/bufferedreader

作用:支援輸入換行符

可一次寫一行,讀一行

public static void write() throws exception

//3關閉

bw.close();

system.out.println("寫入完畢");

}

public static void read() throws exception

//3關閉

br.close();

}

橋轉換流:inputstreamreader/outputstreamwriter

作用:可以將位元組流轉換為字元流

可設定字元的編碼方式

public static void read() throws exception

//3關閉

isr.close();

system.out.println();

}

public static void write() throws exception

//3關閉

osw.close();

}

列印流:printstream:位元組列印流,printwriter:字元列印流。

作用:封裝了print()/println()方法,支援寫入後換行。

printstream型別:system.out預設列印到控制台,重定向標準輸出流

public class testprint 

}

randomomaccessfile即可以讀取檔案內容,也可以向檔案中寫入內容,但是和其他輸入/輸出流不同的是,程式可以直接跳到檔案的任意位置來讀寫資料。

讀寫模式:r:唯讀 rw:讀寫

作用:快速定位資料,支援併發讀寫

方便獲取二進位制檔案

public class testrandomaccessfile 

public static void write() throws exception

public static void read() throws exception

}

public class testproperties 

}

位元組流與字元流

位元組流 輸入位元組流 inputstream 所有輸入位元組流的基類,是抽象類 fileinputstream 讀取檔案資料的輸入位元組流 bufferedinputstream 緩衝輸入位元組流,該類可以提高讀取檔案資料的效率 輸出位元組流 outputstream 所有輸出位元組流的基類,是抽...

位元組流與字元流

1.在位元組流中輸出資料主要是使用outputstream完成,輸入使的是inputstream,在字元流中輸出主要是使用writer類完成,輸入流主要使用reader類完成。這四個都是抽象類 2.inputstream 和outputstream,兩個是為位元組流設計的,主要用來處理位元組或二進位...

位元組流與字元流

位元組流與字元流的操作的本質區別只有乙個 位元組流是原生的操作,而字元流是經過處理後的操作。在進行網路資料傳輸 磁碟資料儲存所儲存的支援資料型別只有 位元組,所以磁碟中的資料必須先讀取到記憶體後才可以操作,記憶體可以可以幫助我們把位元組變成字元。字元更加適合操作中文。位元組流 inputstream...