摘要:分類一按操作方式類結(jié)構(gòu)字節(jié)流和字符流字節(jié)流以字節(jié)為單位,每次次讀入或讀出是位數(shù)據(jù)。該對(duì)象并不是流體系中的一員,其封裝了字節(jié)流,同時(shí)還封裝了一個(gè)緩沖區(qū)字符數(shù)組,通過(guò)內(nèi)部的指針來(lái)操作字符數(shù)組中的數(shù)據(jù)。
分類一:按操作方式(類結(jié)構(gòu))
字節(jié)流和字符流:
字節(jié)流:以字節(jié)為單位,每次次讀入或讀出是8位數(shù)據(jù)。可以讀任何類型數(shù)據(jù)。
字符流:以字符為單位,每次次讀入或讀出是16位數(shù)據(jù)。其只能讀取字符類型數(shù)據(jù)。
輸出流和輸入流:
輸出流:從內(nèi)存讀出到文件。只能進(jìn)行寫操作。
輸入流:從文件讀入到內(nèi)存。只能進(jìn)行讀操作。
節(jié)點(diǎn)流和處理流:
節(jié)點(diǎn)流:直接與數(shù)據(jù)源相連,讀入或讀出。
處理流:與節(jié)點(diǎn)流一塊使用,在節(jié)點(diǎn)流的基礎(chǔ)上,再套接一層,套接在節(jié)點(diǎn)流上的就是處理流。
為什么要有處理流?直接使用節(jié)點(diǎn)流,讀寫不方便,為了更快的讀寫文件,才有了處理流。
輸入字節(jié)流InputStream:三種基本的節(jié)點(diǎn)流:FileInputStream、ByteArrayInputStream、PipedInputStream
四個(gè)處理流:ObjectInputStream 和所有FilterInputStream 的子類DataInputStream、BufferedInputStream、SequenceInputStream
輸出字節(jié)流OutputStream:同上
字節(jié)流的輸入和輸出對(duì)照?qǐng)D:
字符輸入流Reader:CharArrayReader、StringReader 是兩種基本的介質(zhì)流,它們分別將 Char 數(shù)組、String中讀取數(shù)據(jù)。
BufferedReader 很明顯就是一個(gè)裝飾器,它和其子類負(fù)責(zé)裝飾其它 Reader 對(duì)象。
PipedReader:是從與其它線程共用的管道中讀取數(shù)據(jù)
FilterReader 是所有自定義具體裝飾流的父類,其子類PushbackReader 對(duì) Reader 對(duì)象進(jìn)行裝飾,會(huì)增加一個(gè)行號(hào)。
InputStreamReader: 是一個(gè)連接字節(jié)流和字符流的橋梁,它將字節(jié)流轉(zhuǎn)變?yōu)樽址鳌?/strong>FileReader可以說(shuō)是一個(gè)達(dá)到此功能、常用的工具類,在其源代碼中明顯使用了將FileInputStream 轉(zhuǎn)變?yōu)?Reader 的方法。我們可以從這個(gè)類中得到一定的技巧。Reader 中各個(gè)類的用途和使用方法基本和 InputStream 中的類使用一致。
字符輸出流Writer:CharArrayWriter、StringWriter 是兩種基本的介質(zhì)流,它們分別向 Char 數(shù)組、String 中寫入數(shù)據(jù)。
PipedWriter: 是向與其它線程共用的管道中寫入數(shù)據(jù)
BufferedWriter 是一個(gè)裝飾器,為 Writer 提供緩沖功能。
PrintWriter 和 PrintStream 極其類似,功能和使用也非常相似。
OutputStreamWriter: 是OutputStream 到 Writer 轉(zhuǎn)換的橋梁,它的子類FileWriter,其實(shí)就是一個(gè)實(shí)現(xiàn)此功能的具體類,功能和使用和OutputStream極其類似
字符流的輸入和輸出對(duì)照?qǐng)D
..]
轉(zhuǎn)換流的特點(diǎn):
字符流和字節(jié)流之間的橋梁
可對(duì)讀取到的字節(jié)數(shù)據(jù)經(jīng)過(guò)指定編碼轉(zhuǎn)換成字符
可對(duì)讀取到的字符數(shù)據(jù)經(jīng)過(guò)指定編碼轉(zhuǎn)換成字節(jié)
何時(shí)使用轉(zhuǎn)換流?
當(dāng)字節(jié)和字符之間有轉(zhuǎn)換動(dòng)作時(shí)
流操作的數(shù)據(jù)需要編碼或解碼時(shí)
OutputStreamWriter:輸出流轉(zhuǎn)到寫流
String fileName= "hello.txt"; try { Writer out=new OutputStreamWriter( new FileOutputStream( new File(fileName))); try { out.write("hello"); }catch (IOException e){ e.printStackTrace(); }finally { out.close(); } }catch (IOException e){ e.printStackTrace(); }
InputStreamReader:輸入流轉(zhuǎn)到讀流
try { Reader read=new InputStreamReader( new FileInputStream(new File(fileName))); try { BufferedReader reader = new BufferedReader(read); String s; while ((s = reader.readLine()) != null){ System.out.println(s); } }catch (IOException e){ e.printStackTrace(); }finally { read.close(); } }catch (IOException e){ e.printStackTrace(); }
這兩個(gè)流對(duì)象是字符體系中的成員,它們有轉(zhuǎn)換作用,本身又是字符流,所以在構(gòu)造的時(shí)候需要傳入字節(jié)流對(duì)象進(jìn)來(lái)。
分類二:按操作對(duì)象對(duì)文件進(jìn)行操作(節(jié)點(diǎn)流):
FileInputStream(字節(jié)輸入流)
FileOutputStream(字節(jié)輸出流)
FileReader(字符輸入流)
FileWriter(字符輸出流)
對(duì)管道進(jìn)行操作(節(jié)點(diǎn)流):
PipedInputStream(字節(jié)輸入流)
PipedOutStream(字節(jié)輸出流):PipedInputStream的一個(gè)實(shí)例要和PipedOutputStream的一個(gè)實(shí)例共同使用,共同完成管道的讀取寫入操作。主要用于線程操作。
PipedReader(字符輸入流)
PipedWriter(字符輸出流)
字節(jié)/字符數(shù)組流(節(jié)點(diǎn)流):
ByteArrayInputStream
ByteArrayOutputStream
CharArrayReader
CharArrayWriter
Buffered緩沖流(處理流):是帶緩沖區(qū)的處理流,緩沖區(qū)的作用的主要目的是:避免每次和硬盤打交道,提高數(shù)據(jù)訪問(wèn)的效率。
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
轉(zhuǎn)化流(處理流):
InputStreamReader:把字節(jié)轉(zhuǎn)化成字符
OutputStreamWriter:把字節(jié)轉(zhuǎn)化成字符
基本類型數(shù)據(jù)流(處理流):用于操作基本數(shù)據(jù)類型值
DataInputStream
DataOutputStream。
因?yàn)槠綍r(shí)若是我們輸出一個(gè)8個(gè)字節(jié)的long類型或4個(gè)字節(jié)的float類型,那怎么辦呢?可以一個(gè)字節(jié)一個(gè)字節(jié)輸出,也可以把轉(zhuǎn)換成字符串輸出,但是這樣轉(zhuǎn)換費(fèi)時(shí)間,若是直接輸出該多好啊,因此這個(gè)數(shù)據(jù)流就解決了我們輸出數(shù)據(jù)類型的困難。數(shù)據(jù)流可以直接輸出float類型或long類型,提高了數(shù)據(jù)讀寫的效率。
打印流(處理流):一般是打印到控制臺(tái),可以進(jìn)行控制打印的地方。
PrintStream
PrintWriter
對(duì)象流(處理流):把封裝的對(duì)象直接輸出,而不是一個(gè)個(gè)在轉(zhuǎn)換成字符串再輸出。
ObjectInputStream,對(duì)象反序列化
ObjectOutputStream,對(duì)象序列化
合并流(處理流):
SequenceInputStream:可以認(rèn)為是一個(gè)工具類,將兩個(gè)或者多個(gè)輸入流當(dāng)成一個(gè)輸入流依次讀取。
FileFile類是對(duì)文件系統(tǒng)中文件以及文件夾進(jìn)行封裝的對(duì)象,可以通過(guò)對(duì)象的思想來(lái)操作文件和文件夾。
File類保存文件或目錄的各種元數(shù)據(jù)信息,包括文件名、文件長(zhǎng)度、最后修改時(shí)間、是否可讀、獲取當(dāng)前文件的路徑名,判斷指定文件是否存在、獲得當(dāng)前目錄中的文件列表,創(chuàng)建、刪除文件和目錄等方法。
RandomAccessFile該對(duì)象并不是IO流體系中的一員,其封裝了字節(jié)流,同時(shí)還封裝了一個(gè)緩沖區(qū)(字符數(shù)組),通過(guò)內(nèi)部的指針來(lái)操作字符數(shù)組中的數(shù)據(jù)。 該對(duì)象特點(diǎn):
該對(duì)象只能操作文件,所以構(gòu)造函數(shù)接收兩種類型的參數(shù):a.字符串文件路徑;b.File對(duì)象。
該對(duì)象既可以對(duì)文件進(jìn)行讀操作,也能進(jìn)行寫操作,在進(jìn)行對(duì)象實(shí)例化時(shí)可指定操作模式(r,rw)。
注意:
該對(duì)象在實(shí)例化時(shí),如果要操作的文件不存在,會(huì)自動(dòng)創(chuàng)建;如果文件存在,寫數(shù)據(jù)未指定位置,會(huì)從頭開始寫,即覆蓋原有的內(nèi)容??梢杂糜诙嗑€程下載或多個(gè)線程同時(shí)寫數(shù)據(jù)到文件。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68016.html
摘要:流按操作類型分為兩種字節(jié)流字節(jié)流可以操作任何數(shù)據(jù)因?yàn)樵谟?jì)算機(jī)中任何數(shù)據(jù)都是以字節(jié)的形式存儲(chǔ)的字符流字符流只能操作純字符數(shù)據(jù),比較方便。 1_IO流概述及其分類 1.概念 IO流用來(lái)處理設(shè)備之間的數(shù)據(jù)傳輸 Java對(duì)數(shù)據(jù)的操作是通過(guò)流的方式 Java用于操作流的類都在IO包中 流按流向分為兩種:輸入流,輸出流。 流按操作類型分為兩種: 字節(jié)流 : 字節(jié)流可以操作任何數(shù)據(jù),因?yàn)樵?..
摘要:字符流字符流是什么字符流是可以直接讀寫字符的流字符流讀取字符就要先讀取到字節(jié)數(shù)據(jù)然后轉(zhuǎn)為字符如果要寫出字符需要把字符轉(zhuǎn)為字節(jié)再寫出類的方法可以按照字符大小讀取通過(guò)項(xiàng)目默認(rèn)的碼表一次讀取一個(gè)字符賦值給將讀到的字符強(qiáng)轉(zhuǎn)后打印字符流類的方法可以 1_字符流FileReader 1.字符流是什么 字符流是可以直接讀寫字符的IO流 字符流讀取字符, 就要先讀取到字節(jié)數(shù)據(jù), 然后轉(zhuǎn)為字符. ...
摘要:上篇說(shuō)了最基礎(chǔ)的五種模型,相信大家對(duì)相關(guān)的概念應(yīng)該有了一定的了解,這篇文章主要講講基于多路復(fù)用的。 上篇說(shuō)了最基礎(chǔ)的五種IO模型,相信大家對(duì)IO相關(guān)的概念應(yīng)該有了一定的了解,這篇文章主要講講基于多路復(fù)用IO的Java NIO。 背景 Java誕生至今,有好多種IO模型,從最早的Java IO到后來(lái)的Java NIO以及最新的Java AIO,每種IO模型都有它自己的特點(diǎn),詳情請(qǐng)看我的上...
摘要:目的因最熟悉故最后還是拿做突破口學(xué)習(xí)本文只運(yùn)行功能以后具體在分析運(yùn)行環(huán)境網(wǎng)絡(luò)遠(yuǎn)程本地遠(yuǎn)程下載運(yùn)行網(wǎng)絡(luò)核查網(wǎng)絡(luò)是否啟動(dòng)成功這一步我遇到的問(wèn)題是未啟動(dòng)成功原因在于中這 目的 因最熟悉java,故最后還是拿java做突破口學(xué)習(xí)sdk,本文只運(yùn)行demo,sdk功能以后具體在分析. 運(yùn)行環(huán)境 Fabric網(wǎng)絡(luò) 遠(yuǎn)程Centos Fabric-sdk-java 本地MacOs Intellij...
摘要:轉(zhuǎn)發(fā)自 轉(zhuǎn)發(fā)自 http://netty.io/wiki/referenc... Since Netty version 4, the life cycle of certain objects are managed by their reference counts, so that Netty can return them (or their shared resources)...
Java IO對(duì)大多數(shù)Java程序員來(lái)說(shuō)是熟悉又陌生,熟悉的是感覺(jué)到處都有它的身影,小到簡(jiǎn)單的讀取文件,大到各種服務(wù)器的應(yīng)用,陌生的是Java IO背后到底是一個(gè)怎樣的機(jī)制,今天就讓我們?nèi)チ私庖幌逻@位老朋友吧。本文不講解Java IO如何具體使用,有這方面需求的同學(xué)可以自己查下。 IO模型 要說(shuō)IO,就不得不說(shuō)IO模型,IO模型大家都有所了解,同步異步,阻塞非阻塞什么的,總的來(lái)說(shuō)IO模型可分為以下...
閱讀 2846·2023-04-26 02:23
閱讀 1594·2021-11-11 16:55
閱讀 3155·2021-10-19 11:47
閱讀 3370·2021-09-22 15:15
閱讀 1984·2019-08-30 15:55
閱讀 1045·2019-08-29 15:43
閱讀 1299·2019-08-29 13:16
閱讀 2203·2019-08-29 12:38