摘要:分類一按操作方式類結(jié)構(gòu)字節(jié)流和字符流字節(jié)流以字節(jié)為單位,每次次讀入或讀出是位數(shù)據(jù)。該對象并不是流體系中的一員,其封裝了字節(jié)流,同時還封裝了一個緩沖區(qū)字符數(shù)組,通過內(nèi)部的指針來操作字符數(shù)組中的數(shù)據(jù)。
分類一:按操作方式(類結(jié)構(gòu))
字節(jié)流和字符流:
字節(jié)流:以字節(jié)為單位,每次次讀入或讀出是8位數(shù)據(jù)。可以讀任何類型數(shù)據(jù)。
字符流:以字符為單位,每次次讀入或讀出是16位數(shù)據(jù)。其只能讀取字符類型數(shù)據(jù)。
輸出流和輸入流:
輸出流:從內(nèi)存讀出到文件。只能進行寫操作。
輸入流:從文件讀入到內(nèi)存。只能進行讀操作。
節(jié)點流和處理流:
節(jié)點流:直接與數(shù)據(jù)源相連,讀入或讀出。
處理流:與節(jié)點流一塊使用,在節(jié)點流的基礎(chǔ)上,再套接一層,套接在節(jié)點流上的就是處理流。
為什么要有處理流?直接使用節(jié)點流,讀寫不方便,為了更快的讀寫文件,才有了處理流。
輸入字節(jié)流InputStream:三種基本的節(jié)點流:FileInputStream、ByteArrayInputStream、PipedInputStream
四個處理流:ObjectInputStream 和所有FilterInputStream 的子類DataInputStream、BufferedInputStream、SequenceInputStream
輸出字節(jié)流OutputStream:同上
字節(jié)流的輸入和輸出對照圖:
字符輸入流Reader:CharArrayReader、StringReader 是兩種基本的介質(zhì)流,它們分別將 Char 數(shù)組、String中讀取數(shù)據(jù)。
BufferedReader 很明顯就是一個裝飾器,它和其子類負責(zé)裝飾其它 Reader 對象。
PipedReader:是從與其它線程共用的管道中讀取數(shù)據(jù)
FilterReader 是所有自定義具體裝飾流的父類,其子類PushbackReader 對 Reader 對象進行裝飾,會增加一個行號。
InputStreamReader: 是一個連接字節(jié)流和字符流的橋梁,它將字節(jié)流轉(zhuǎn)變?yōu)樽址鳌?/strong>FileReader可以說是一個達到此功能、常用的工具類,在其源代碼中明顯使用了將FileInputStream 轉(zhuǎn)變?yōu)?Reader 的方法。我們可以從這個類中得到一定的技巧。Reader 中各個類的用途和使用方法基本和 InputStream 中的類使用一致。
字符輸出流Writer:CharArrayWriter、StringWriter 是兩種基本的介質(zhì)流,它們分別向 Char 數(shù)組、String 中寫入數(shù)據(jù)。
PipedWriter: 是向與其它線程共用的管道中寫入數(shù)據(jù)
BufferedWriter 是一個裝飾器,為 Writer 提供緩沖功能。
PrintWriter 和 PrintStream 極其類似,功能和使用也非常相似。
OutputStreamWriter: 是OutputStream 到 Writer 轉(zhuǎn)換的橋梁,它的子類FileWriter,其實就是一個實現(xiàn)此功能的具體類,功能和使用和OutputStream極其類似
字符流的輸入和輸出對照圖
..]
轉(zhuǎn)換流的特點:
字符流和字節(jié)流之間的橋梁
可對讀取到的字節(jié)數(shù)據(jù)經(jīng)過指定編碼轉(zhuǎn)換成字符
可對讀取到的字符數(shù)據(jù)經(jīng)過指定編碼轉(zhuǎn)換成字節(jié)
何時使用轉(zhuǎn)換流?
當(dāng)字節(jié)和字符之間有轉(zhuǎn)換動作時
流操作的數(shù)據(jù)需要編碼或解碼時
OutputStreamWriter:輸出流轉(zhuǎn)到寫流
</>復(fù)制代碼
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)到讀流
</>復(fù)制代碼
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();
}
這兩個流對象是字符體系中的成員,它們有轉(zhuǎn)換作用,本身又是字符流,所以在構(gòu)造的時候需要傳入字節(jié)流對象進來。
分類二:按操作對象對文件進行操作(節(jié)點流):
FileInputStream(字節(jié)輸入流)
FileOutputStream(字節(jié)輸出流)
FileReader(字符輸入流)
FileWriter(字符輸出流)
對管道進行操作(節(jié)點流):
PipedInputStream(字節(jié)輸入流)
PipedOutStream(字節(jié)輸出流):PipedInputStream的一個實例要和PipedOutputStream的一個實例共同使用,共同完成管道的讀取寫入操作。主要用于線程操作。
PipedReader(字符輸入流)
PipedWriter(字符輸出流)
字節(jié)/字符數(shù)組流(節(jié)點流):
ByteArrayInputStream
ByteArrayOutputStream
CharArrayReader
CharArrayWriter
Buffered緩沖流(處理流):是帶緩沖區(qū)的處理流,緩沖區(qū)的作用的主要目的是:避免每次和硬盤打交道,提高數(shù)據(jù)訪問的效率。
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
轉(zhuǎn)化流(處理流):
InputStreamReader:把字節(jié)轉(zhuǎn)化成字符
OutputStreamWriter:把字節(jié)轉(zhuǎn)化成字符
基本類型數(shù)據(jù)流(處理流):用于操作基本數(shù)據(jù)類型值
DataInputStream
DataOutputStream。
因為平時若是我們輸出一個8個字節(jié)的long類型或4個字節(jié)的float類型,那怎么辦呢?可以一個字節(jié)一個字節(jié)輸出,也可以把轉(zhuǎn)換成字符串輸出,但是這樣轉(zhuǎn)換費時間,若是直接輸出該多好啊,因此這個數(shù)據(jù)流就解決了我們輸出數(shù)據(jù)類型的困難。數(shù)據(jù)流可以直接輸出float類型或long類型,提高了數(shù)據(jù)讀寫的效率。
打印流(處理流):一般是打印到控制臺,可以進行控制打印的地方。
PrintStream
PrintWriter
對象流(處理流):把封裝的對象直接輸出,而不是一個個在轉(zhuǎn)換成字符串再輸出。
ObjectInputStream,對象反序列化
ObjectOutputStream,對象序列化
合并流(處理流):
SequenceInputStream:可以認為是一個工具類,將兩個或者多個輸入流當(dāng)成一個輸入流依次讀取。
FileFile類是對文件系統(tǒng)中文件以及文件夾進行封裝的對象,可以通過對象的思想來操作文件和文件夾。
File類保存文件或目錄的各種元數(shù)據(jù)信息,包括文件名、文件長度、最后修改時間、是否可讀、獲取當(dāng)前文件的路徑名,判斷指定文件是否存在、獲得當(dāng)前目錄中的文件列表,創(chuàng)建、刪除文件和目錄等方法。
RandomAccessFile該對象并不是IO流體系中的一員,其封裝了字節(jié)流,同時還封裝了一個緩沖區(qū)(字符數(shù)組),通過內(nèi)部的指針來操作字符數(shù)組中的數(shù)據(jù)。 該對象特點:
該對象只能操作文件,所以構(gòu)造函數(shù)接收兩種類型的參數(shù):a.字符串文件路徑;b.File對象。
該對象既可以對文件進行讀操作,也能進行寫操作,在進行對象實例化時可指定操作模式(r,rw)。
注意:
該對象在實例化時,如果要操作的文件不存在,會自動創(chuàng)建;如果文件存在,寫數(shù)據(jù)未指定位置,會從頭開始寫,即覆蓋原有的內(nèi)容。可以用于多線程下載或多個線程同時寫數(shù)據(jù)到文件。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/68016.html
摘要:流按操作類型分為兩種字節(jié)流字節(jié)流可以操作任何數(shù)據(jù)因為在計算機中任何數(shù)據(jù)都是以字節(jié)的形式存儲的字符流字符流只能操作純字符數(shù)據(jù),比較方便。 1_IO流概述及其分類 1.概念 IO流用來處理設(shè)備之間的數(shù)據(jù)傳輸 Java對數(shù)據(jù)的操作是通過流的方式 Java用于操作流的類都在IO包中 流按流向分為兩種:輸入流,輸出流。 流按操作類型分為兩種: 字節(jié)流 : 字節(jié)流可以操作任何數(shù)據(jù),因為在...
摘要:字符流字符流是什么字符流是可以直接讀寫字符的流字符流讀取字符就要先讀取到字節(jié)數(shù)據(jù)然后轉(zhuǎn)為字符如果要寫出字符需要把字符轉(zhuǎn)為字節(jié)再寫出類的方法可以按照字符大小讀取通過項目默認的碼表一次讀取一個字符賦值給將讀到的字符強轉(zhuǎn)后打印字符流類的方法可以 1_字符流FileReader 1.字符流是什么 字符流是可以直接讀寫字符的IO流 字符流讀取字符, 就要先讀取到字節(jié)數(shù)據(jù), 然后轉(zhuǎn)為字符. ...
摘要:上篇說了最基礎(chǔ)的五種模型,相信大家對相關(guān)的概念應(yīng)該有了一定的了解,這篇文章主要講講基于多路復(fù)用的。 上篇說了最基礎(chǔ)的五種IO模型,相信大家對IO相關(guān)的概念應(yīng)該有了一定的了解,這篇文章主要講講基于多路復(fù)用IO的Java NIO。 背景 Java誕生至今,有好多種IO模型,從最早的Java IO到后來的Java NIO以及最新的Java AIO,每種IO模型都有它自己的特點,詳情請看我的上...
摘要:目的因最熟悉故最后還是拿做突破口學(xué)習(xí)本文只運行功能以后具體在分析運行環(huán)境網(wǎng)絡(luò)遠程本地遠程下載運行網(wǎng)絡(luò)核查網(wǎng)絡(luò)是否啟動成功這一步我遇到的問題是未啟動成功原因在于中這 目的 因最熟悉java,故最后還是拿java做突破口學(xué)習(xí)sdk,本文只運行demo,sdk功能以后具體在分析. 運行環(huán)境 Fabric網(wǎng)絡(luò) 遠程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)...
閱讀 2841·2023-04-26 02:23
閱讀 1586·2021-11-11 16:55
閱讀 3152·2021-10-19 11:47
閱讀 3363·2021-09-22 15:15
閱讀 1980·2019-08-30 15:55
閱讀 1039·2019-08-29 15:43
閱讀 1296·2019-08-29 13:16
閱讀 2199·2019-08-29 12:38
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要