- 相關(guān)推薦
javaio流學(xué)習(xí)總結(jié)范文
總結(jié)一:javaio流學(xué)習(xí)總結(jié)
一、io流的三種分類方式
1.按流的方向分為:輸入流和輸出流
2.按流的數(shù)據(jù)單位不同分為:字節(jié)流和字符流
3.按流的功能不同分為:節(jié)點流和處理流
二、io流的四大抽象類:
字符流:reader writer
字節(jié)流:inputstream(讀數(shù)據(jù))
outputstream(寫數(shù)據(jù))
三、inputstream的基本方法
int read() throws ioexception 讀取一個字節(jié)以整數(shù)形式返回,如果返回-1已到輸入流的末尾
void close() throws ioexception 關(guān)閉流釋放內(nèi)存資源
long skip(long n) throws ioexception 跳過n個字節(jié)不讀
四、outputstream的基本方法
void write(int b) throws ioexception 向輸出流寫入一個字節(jié)數(shù)據(jù)
void flush() throws ioexception 將輸出流中緩沖的數(shù)據(jù)全部寫出到目的地
五、writer的基本方法
void write(int c) throws ioexception 向輸出流寫入一個字符數(shù)據(jù)
void write(string str) throws ioexception將一個字符串中的字符寫入到輸出流
void write(string str,int offset,int length)
將一個字符串從offset開始的length個字符寫入到輸出流
void flush() throws ioexception
將輸出流中緩沖的`數(shù)據(jù)全部寫出到目的地
六、reader的基本方法
int read() throws ioexception 讀取一個字符以整數(shù)形式返回,如果返回-1已到輸入流的末尾
七、節(jié)點流類型
八、訪問文件之fileinputstream和fileoutputstream繼承基類用于向文件中輸入輸出字節(jié)
九、訪問文件之filereader和filewriter繼承基類用于向文件中輸入輸出字符
----輸出流在構(gòu)造函數(shù)第二個參數(shù)可以設(shè)置true意義為跟在已有文件后進行輸入
----此類流會拋出filenotfoundexception需要對其進行顯示捕捉
十、緩沖流:緩沖流要套接在相應(yīng)的節(jié)點流之上,提高了讀寫的效率。
此處理流的構(gòu)造方法都得傳相對應(yīng)的基類類型
bufferedreader:提供了readline方法用于高校讀取一行字符串
bufferedwriter:提供了newline用于寫入一個行分隔符也就是換行
bufferedinputstream 沒多大用處
bufferedoutputstream 沒多大用處
十一、轉(zhuǎn)換流:主要作用將字節(jié)流轉(zhuǎn)換成字符流。用處較大!
轉(zhuǎn)換流在構(gòu)造時可以指定其編碼集合
inputstreamreader需要和inputstream套接
outputstreamwriter需要和outputstream套接
例:outputstreamwriter osw = new outputstreamwriter (new fileoutputstream(文件路徑);
方法例:osw.getencoding(); 獲得流的編碼方式
十二、數(shù)據(jù)流與字節(jié)數(shù)組流:
數(shù)據(jù)流主要為實現(xiàn)可以存取java原始數(shù)據(jù)類型如long,boolean
數(shù)據(jù)流是字節(jié)流
datainputstream需要和inputstream套接
dataoutputstream需要和outputstream套接
datainputstream方法:readboolean() readint() read……()……
readutf():網(wǎng)絡(luò)傳輸常用方法 讀一個unicode字符串
dataoutputstream方法與datainputstream基本對應(yīng)為寫的方法
//此構(gòu)造函數(shù)等于已可以往一個字節(jié)數(shù)組里輸入內(nèi)容
bytearrayoutputstream baos = new bytearrayoutputstream ();
//此方法為獲取一個字節(jié)數(shù)組方法返回字節(jié)數(shù)組
baos.tobytearray();
//此方法獲取字節(jié)數(shù)組占了多少字節(jié)
new bytearrayinputstream(一個字節(jié)數(shù)組)。available()
1bytearrayoutputstream baos =
2 new bytearrayoutputstream();
3 dataoutputstream dos =
4 new dataoutputstream(baos);
5 try {
6 dos.writedouble(math.random());
7 dos.writeboolean(true);
8 bytearrayinputstream bais =
9 new bytearrayinputstream(baos.tobytearray());
10 system.out.println(bais.available());
11 datainputstream dis = new datainputstream(bais);
12 system.out.println(dis.readdouble());
13 system.out.println(dis.readboolean());
14 dos.close(); dis.close();
15 } catch (ioexception e) {
16 e.printstacktrace();
17 }
十三、print流
print流只有輸出流無輸入流,printwriter和printstream分別針對字符字節(jié)
兩個類提供了重載的print和println方法用于多種數(shù)據(jù)類型的輸出
printwriter和printstream的輸出操作不會拋出異常
printwriter和printstream有自動flush功能
----system.setout(接收outputstream類):用于設(shè)置系統(tǒng)默認(rèn)輸出流
十四、object流
等同于c#序列化,用直接將object寫入或讀出
transient關(guān)鍵字為不序列化此成員變量
需要序列化的類必須實現(xiàn)serializable接口
主要方法:writeobject(object); readobject();
讀出為object類型需要強轉(zhuǎn)數(shù)據(jù)類型
1 import java.io.*;
2
3 public class testobjectio {
4 public static void main(string args[]) throws exception {
5 t t = new t();
6 t.k = 8;
7 fileoutputstream fos = new fileoutputstream("d:/share/java/io/testobjectio.dat");
8 objectoutputstream oos = new objectoutputstream(fos);
9 oos.writeobject(t);
10 oos.flush();
11 oos.close();
12
13 fileinputstream fis = new fileinputstream("d:/share/java/io/testobjectio.dat");
14 objectinputstream ois = new objectinputstream(fis);
15 t treaded = (t)ois.readobject();
16 system.out.println(treaded.i + " " + treaded.j + " " + treaded.d + " " + treaded.k);
17
18 }
19 }
20
21 class t
22 implements serializable
23 {
24 int i = 10;
25 int j = 9;
26 double d = 2.3;
27 transient int k = 15;
28 }
總結(jié)二:javaio流學(xué)習(xí)總結(jié)
今天剛剛看完java的io流操作,把主要的脈絡(luò)看了一遍,不能保證以后使用時都能得心應(yīng)手,但是最起碼用到時知道有這么一個功能可以實現(xiàn),下面對學(xué)習(xí)進行一下簡單的總結(jié):
io流主要用于硬板、內(nèi)存、鍵盤等處理設(shè)備上得數(shù)據(jù)操作,根據(jù)處理數(shù)據(jù)的數(shù)據(jù)類型的不同可以分為:字節(jié)流(抽象基類為inputstream和outputstream)和字符流(抽象基類為reader和writer)。根據(jù)流向不同,可以分為:輸入流和輸出流。
字符流和字節(jié)流的主要區(qū)別:
1.字節(jié)流讀取的時候,讀到一個字節(jié)就返回一個字節(jié); 字符流使用了字節(jié)流讀到一個或多個字節(jié)(中文對應(yīng)的字節(jié)數(shù)是兩個,在utf-8碼表中是3個字節(jié))時。先去查指定的編碼表,將查到的字符返回。
2.字節(jié)流可以處理所有類型數(shù)據(jù),如:圖片,mp3,avi視頻文件,而字符流只能處理字符數(shù)據(jù)。只要是處理純文本數(shù)據(jù),就要優(yōu)先考慮使用字符流,除此之外都用字節(jié)流。
io流主要可以分為節(jié)點流和處理流兩大類。
一、節(jié)點流類型
該類型可以從或者向一個特定的地點或者節(jié)點讀寫數(shù)據(jù)。
二、處理流類型
該類型是對一個已存在的流的連接和封裝,通過所封裝的流的功能調(diào)用實現(xiàn)數(shù)據(jù)讀寫,處理流的構(gòu)造方法總是要帶一個其他流對象作為參數(shù),一個流對象進過其他流的多次包裝,叫做流的鏈接。主要可以分為以下幾種:
一、緩沖流(bufferedinputstream/bufferedoutputstream和bufferedwriter/bufferedreader)他可以提高對流的操作效率。
該類型的流有一個特有的方法:readline();一次讀一行,到行標(biāo)記時,將行標(biāo)記之前的字符數(shù)據(jù)作為字符串返回,當(dāng)讀到末尾時,返回null,其原理還是與緩沖區(qū)關(guān)聯(lián)的流對象的read方法,只不過每一次讀取到一個字符,先不進行具體操作,先進行臨時儲存,當(dāng)讀取到回車標(biāo)記時,將臨時容器中儲存的數(shù)據(jù)一次性返回。
二、轉(zhuǎn)換流(inputstreamreader/outputstreamwriter)
該類型時字節(jié)流和字符流之間的'橋梁,該流對象中可以對讀取到的字節(jié)數(shù)據(jù)進行指定編碼的編碼轉(zhuǎn)換。
注意:在使用filereader操作文本數(shù)據(jù)時,該對象使用的時默認(rèn)的編碼表,即
filereader fr=new filereader(“a.txt”); 與inputstreamreader isr=new inputstreamreader(new fileinputstream("a.txt")); 的意義相同。如果要使用指定表編碼表時,必須使用轉(zhuǎn)換流,即如果a.txt中的文件中的字符數(shù)據(jù)是通過utf-8的形式編碼,那么在讀取時,就必須指定編碼表,那么轉(zhuǎn)換流時必須的。即:
inputstreamreader isr=new inputstreamreader(new fileinputstream("a.txt"),utf-8);
三、數(shù)據(jù)流(datainputstream/dataoutputstream)
該數(shù)據(jù)流可以方便地對一些基本類型數(shù)據(jù)進行直接的存儲和讀取,不需要再進一步進行轉(zhuǎn)換,通常只要操作基本數(shù)據(jù)類型的數(shù)據(jù),就需要通過datastream進行包裝。
四、打印流(printstream/printwriter)
printstream是一個字節(jié)打印流,system.out對應(yīng)的類型就是printstream,它的構(gòu)造函數(shù)可以接受三種數(shù)據(jù)類型的值:1.字符串路徑。2.file對象 3.outputstream
printstream是一個字符打印流,它的構(gòu)造函數(shù)可以接受四種類型的值:1.字符串路徑。2.file對象 3.outputstream 4.writer 對于1、2類型的數(shù)據(jù),可以指定編碼表,也就是字符集,對于3、4類型的數(shù)據(jù),可以指定自動刷新,當(dāng)該自動刷新為true時,只有3個方法可以用:println,printf,format。
五、對象流(objectinputstream/objectoutputstream)
該類型的流可以把類作為一個整體進行存取,主要方法有:
object readobject();該方法拋出異常:classnotfountexception。
void writeobject(object):被寫入的對象必須實現(xiàn)一個接口:serializable,否則就會拋出:notserializableexception
總結(jié)三:javaio流學(xué)習(xí)總結(jié)
流的概念和作用
流是一組有順序的,有起點和終點的字節(jié)集合,是對數(shù)據(jù)傳輸?shù)目偡Q或抽象。即數(shù)據(jù)在兩設(shè)備間的傳輸稱為流,流的本質(zhì)是數(shù)據(jù)傳輸,根據(jù)數(shù)據(jù)傳輸特性將流抽象為各種類,方便更直觀的進行數(shù)據(jù)操作。
io流的分類
根據(jù)處理數(shù)據(jù)類型的不同分為:字符流和字節(jié)流
根據(jù)數(shù)據(jù)流向不同分為:輸入流和輸出流
字符流和字節(jié)流
字符流的由來: 因為數(shù)據(jù)編碼的不同,而有了對字符進行高效操作的流對象。本質(zhì)其實就是基于字節(jié)流讀取時,去查了指定的碼表。 字節(jié)流和字符流的區(qū)別:
讀寫單位不同:字節(jié)流以字節(jié)(8bit)為單位,字符流以字符為單位,根據(jù)碼表映射字符,一次可能讀多個字節(jié)。
處理對象不同:字節(jié)流能處理所有類型的數(shù)據(jù)(如圖片、avi等),而字符流只能處理字符類型的數(shù)據(jù)。
結(jié)論:只要是處理純文本數(shù)據(jù),就優(yōu)先考慮使用字符流。 除此之外都使用字節(jié)流。
輸入流和輸出流
對輸入流只能進行讀操作,對輸出流只能進行寫操作,程序中需要根據(jù)待傳輸數(shù)據(jù)的不同特性而使用不同的流。
java io流對象
1.輸入字節(jié)流inputstreamio 中輸入字節(jié)流的繼承圖可見上圖,可以看出:
inputstream 是所有的輸入字節(jié)流的父類,它是一個抽象類。
bytearrayinputstream、stringbufferinputstream、fileinputstream 是三種基本的`介質(zhì)流,它們分別從byte 數(shù)組、stringbuffer、和本地文件中讀取數(shù)據(jù)。pipedinputstream 是從與其它線程共用的管道中讀取數(shù)據(jù),與piped 相關(guān)的知識后續(xù)單獨介紹。
objectinputstream 和所有filterinputstream 的子類都是裝飾流(裝飾器模式的主角)。
2.輸出字節(jié)流outputstream
io中輸出字節(jié)流的繼承圖可見上圖,可以看出:
outputstream 是所有的輸出字節(jié)流的父類,它是一個抽象類。
bytearrayoutputstream、fileoutputstream 是兩種基本的介質(zhì)流,它們分別向byte 數(shù)組、和本地文件中寫入數(shù)據(jù)。pipedoutputstream 是向與其它線程共用的管道中寫入數(shù)據(jù),
objectoutputstream 和所有filteroutputstream 的子類都是裝飾流。
“存在及合理”我們看看這些字節(jié)流中不太對稱的幾個類吧!
linenumberinputstream 主要完成從流中讀取數(shù)據(jù)時,會得到相應(yīng)的行號,至于什么時候分行、在哪里分行是由改類主動確定的,并不是在原始中有這樣一個行號。在輸出部分沒有對應(yīng)的部分,我們完全可以自己建立一個linenumberoutputstream,在最初寫入時會有一個基準(zhǔn)的行號,以后每次遇到換行時會在下一行添加一個行號,看起來也是可以的。好像更不入流了。
pushbackinputstream 的功能是查看最后一個字節(jié),不滿意就放入緩沖區(qū)。主要用在編譯器的語法、詞法分析部分。輸出部分的bufferedoutputstream 幾乎實現(xiàn)相近的功能。
stringbufferinputstream 已經(jīng)被deprecated,本身就不應(yīng)該出現(xiàn)在inputstream 部分,主要因為string 應(yīng)該屬于字符流的范圍。已經(jīng)被廢棄了,當(dāng)然輸出部分也沒有必要需要它了!還允許它存在只是為了保持版本的向下兼容而已。
sequenceinputstream 可以認(rèn)為是一個工具類,將兩個或者多個輸入流當(dāng)成一個輸入流依次讀取。完全可以從io 包中去除,還完全不影響io 包的結(jié)構(gòu),卻讓其更“純潔”╠╠純潔的decorator 模式。
printstream 也可以認(rèn)為是一個輔助工具。主要可以向其他輸出流,或者fileinputstream 寫入數(shù)據(jù),本身內(nèi)部實現(xiàn)還是帶緩沖的。本質(zhì)上是對其它流的綜合運用的一個工具而已。一樣可以踢出io 包!system.out 和system.out 就是printstream 的實例!
3.字符輸入流reader
在上面的繼承關(guān)系圖中可以看出:
reader 是所有的輸入字符流的父類,它是一個抽象類。
charreader、stringreader 是兩種基本的介質(zhì)流,它們分別將char 數(shù)組、string中讀取數(shù)據(jù)。pipedreader 是從與其它線程共用的管道中讀取數(shù)據(jù)。
bufferedreader 很明顯就是一個裝飾器,它和其子類負責(zé)裝飾其它reader 對象。
filterreader 是所有自定義具體裝飾流的父類,其子類pushbackreader 對reader 對象進行裝飾,會增加一個行號。
inputstreamreader 是一個連接字節(jié)流和字符流的橋梁,它將字節(jié)流轉(zhuǎn)變?yōu)樽址。filereader 可以說是一個達到此功能、常用的工具類,在其源代碼中明顯使用了將fileinputstream 轉(zhuǎn)變?yōu)閞eader 的方法。我們可以從這個類中得到一定的技巧。reader 中各個類的用途和使用方法基本和inputstream 中的類使用一致。后面會有reader 與inputstream 的對應(yīng)關(guān)系。
4.字符輸出流writer
在上面的關(guān)系圖中可以看出:
writer 是所有的輸出字符流的父類,它是一個抽象類。
chararraywriter、stringwriter 是兩種基本的介質(zhì)流,它們分別向char 數(shù)組、string 中寫入數(shù)據(jù)。pipedwriter 是向與其它線程共用的管道中寫入數(shù)據(jù),
bufferedwriter 是一個裝飾器為writer 提供緩沖功能。
printwriter 和printstream 極其類似,功能和使用也非常相似。
outputstreamwriter 是outputstream 到writer 轉(zhuǎn)換的橋梁,它的子類filewriter 其實就是一個實現(xiàn)此功能的具體類(具體可以研究一sourcecode)。功能和使用和outputstream 極其類似,后面會有它們的對應(yīng)圖。
5.字符流與字節(jié)流轉(zhuǎn)換
轉(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ù)需要編碼或解碼時。
具體的對象體現(xiàn):
inputstreamreader:字節(jié)到字符的橋梁
outputstreamwriter:字符到字節(jié)的橋梁
這兩個流對象是字符體系中的成員,它們有轉(zhuǎn)換作用,本身又是字符流,所以在構(gòu)造的時候需要傳入字節(jié)流對象進來。
6.file類
file類是對文件系統(tǒng)中文件以及文件夾進行封裝的對象,可以通過對象的思想來操作文件和文件夾。 file類保存文件或目錄的各種元數(shù)據(jù)信息,包括文件名、文件長度、最后修改時間、是否可讀、獲取當(dāng)前文件的路徑名,判斷指定文件是否存在、獲得當(dāng)前目錄中的文件列表,創(chuàng)建、刪除文件和目錄等方法。
7.randomaccessfile類
該對象并不是流體系中的一員,其封裝了字節(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ù)到文件。
【javaio流學(xué)習(xí)總結(jié)】相關(guān)文章:
水不往低處流作文02-18
甲流防控工作總結(jié)報告范文06-06
對標(biāo)一流述職報告08-11
單位通知甲流休假通知04-03
預(yù)防甲流的廣播稿10-11
泥石流應(yīng)急方案通用06-15
預(yù)防甲流的宣傳語06-15
防控甲流宣傳標(biāo)語03-13
泥石流有哪些征兆11-15