安卓io流再回顧

2022-05-02 15:06:12 字數 2904 閱讀 3018

之前學習io模糊模糊的,現在寫下,方便自己理解,和以後再熟悉輕鬆些。(長期更新)

以概念為主。

在學習之前,我們需要了解位元組與字元的概念。

字元流以字元(16 位二進位制)為單位進行處理,主要用於文字檔案等 unicode 資料。 

在這裡可以這樣簡單理解,例如漢字,漢字就是字元,涉及到漢字文字的用字元。

在大多數情況,位元組流更為普遍的,因為多數操作物件都是建立在位元組流基礎上的。

輸入情況

(位元組流) byte陣列

fileinputstream()//建立檔案輸入流

bufferedinputstream() //建立乙個緩衝輸入,讀取大檔案時,用上此方法效率更高。

(字元流)string

filereader()//同上

bufferedreader()//同上

輸出情況簡要概括 input 換成output ,reader換成write(偷點懶)

有時候,需要字元位元組都用,而且還需在其間相互轉化使用。

inputstream提供的是位元組流的讀取,而非文字讀取,用reader讀取出來的是char陣列或者string ,使用inputstream讀取出來的是byte陣列。

reader類及其子類提供的字元流的讀取char,inputstream及其子類提供位元組流的讀取byte,所以 filereader類是將檔案按字元流的方式讀取,fileinputstream則按位元組流的方式讀取檔案;inputstreamreader可以將讀如stream轉換成字元流方式,是reader和stream之間的橋梁。

inputstreamreader(位元組轉字元)

一般儲存在本地的文字時,字元形式,讀取放到展示時,需轉化為位元組形式,並執行後續操作。

outputstreamwriter (反之)

一般地,將展示的儲存到本地時,位元組需轉化成字元形式。

在這裡貼上我瀏覽的文章

最後就是困擾我比較久的問題,關於位元組流字元流的使用場景。

我大致整理了下

1. 明確源和目的    源:   inputstream   reader    目的: outputstream  writer 

2. 是否是純文字?是 源: reader 目的: writer

3. 具體裝置 源: 硬碟 file 目的: 硬碟 file filereader fr = new filereader("a.txt"); filewriter fw = new filewriter("b.txt");

4. 是否需要額外功能 需要高效,轉換 bufferedreader br = new bufferedreader(new filereader("a.txt")); bufferedwriter bw = new bufferedwriter(new filewriter("b.txt"));

需求 2:讀取鍵盤錄入資訊,寫入到乙個檔案中

1. 明確源和目的     源:   inputstream    reader     目的: outputstream   writer 

2. 是否是純文字?是 源: reader 目的: writer

3. 裝置: 源: 鍵盤 system.in 目的: 硬碟 file inputstream in = system.in; filewriter fw = new filewriter("b.txt"); 將讀取的位元組資料轉成字串,再由字元流操作——>

4. 是否需要額外功能? 需要轉換:將位元組流轉成字元流,因為明確的源是 reader,這樣操作文字資料更便捷。所 以,要將已有的位元組流轉成字元流。使用位元組——>字元的物件 inputstreamreader isr = inputstreamreader(system.in); filewriter fw = new filewriter("b.txt"); 需要高效: bufferedreader br = new bufferedreader(new inputstreamreader(system.int)); bufferedwriter bw = new bufferedwriter(new filewriter("b.txt"));

1. 明確源和目的         源:   inputstream   reader         目的: outputstream  writer     

2. 是否是純文字?是 源: reader 目的: writer

3. 明確具體裝置: 源: 硬碟 file 目的:控制台 system.out filereader fr = new filereader("a.txt"); outputstream os = new outputstream(system.out); //printstream

4. 需要額外功能: 需要轉換 filereader fr = new filereader("a.txt"); outputstreamwriter osw = new outputstreamwriter(system.out); 需要高效 bufferedreader br = new bufferedreader(new filereader("a.txt")); bufferedwriter bw = new bufferedwriter(new outputstreamwriter(system.out)):

還有諸多沒說到,今後會補充,長期更新。  

基礎回顧 關於IO流

一.認識file類 關於file類的方法如下 1 檔名 getname 檔名 路徑名 getpath 路徑名 getabsolutefile 絕對路徑所對應的file物件 getabsolutepath 絕對路徑名 getparent 父目錄 相對路徑的父目錄,可能為null 如.刪除本身後的結果 ...

IO流知識回顧1

5.io流 1 目的 講資料以檔案或資料夾的形式,永久性的儲存在計算機上。2 目標 放在硬碟上的檔案。3 file類 4 使用io流的步驟 a 先定義要使用的檔案 file path new file d file.separator text sdeparator表示斜槓 if path.exis...

安卓io流 接收16進製制位元組 出現負值

安卓開發中 接收電腦發來的16進製制資料出現負值 記錄一下 如圖 接收030407e20001020000de8d 接受到的位元組陣列為 3,4,7,30,0,1,2,0,0,34,115 很顯然 出現負值 對我只管印象就不對的 正常的acii碼來說 03 3 04 4 07 7 e2 30.下邊的...