java io 结构_java 的IO类库的基本架构
java IO 操作的類在java.io 包中,大概可以分為以下幾組:
基于字節(jié)操作的接口:InputStream 和 OutputStream
基于字符操作的接口:Writer 和 Reader
基于磁盤操作的接口:File 相關(guān)
基于網(wǎng)絡(luò)操作的接口:Socket 相關(guān)
前兩個(gè)是數(shù)據(jù)格式區(qū)分,后兩個(gè)是傳輸方式區(qū)分。IO 只是人機(jī)交互的手段,除了完成交互功能,我們關(guān)注的就是如何提高他的運(yùn)行效率了,而數(shù)據(jù)格式和傳輸方式是影響效率的最關(guān)鍵的因素。
基于字節(jié)操作的接口
以下是 InputStream 的類層次關(guān)系圖
其實(shí)還有很多子類沒有展示出來,每個(gè)子類對(duì)應(yīng)處理不同的操作類型。
以下是 OutputStream 的類層次關(guān)系圖
兩個(gè)要點(diǎn):
1、操作數(shù)據(jù)的方式可以組合使用
2、必須制定流最終寫到什么地方:要么是磁盤,要么是網(wǎng)絡(luò)中。其實(shí)寫網(wǎng)絡(luò)也是寫磁盤,只是需要讓操作系統(tǒng)再將數(shù)據(jù)傳送到其他地方,而不是本地磁盤。
基于字符操作的接口
不管是磁盤還是網(wǎng)絡(luò)傳輸,最小的存儲(chǔ)單元都是字節(jié),而不是字符,所以IO操作的都是字節(jié)而不是字符,但是為什么有操作字符的IO接口呢?
這是因?yàn)槲覀兂绦虿僮鞯臄?shù)據(jù)都是字符形式的,為了方便操作當(dāng)然要提供直接寫字符的IO接口。
Writer 類層次結(jié)構(gòu)
Reader 類層次結(jié)構(gòu)
Reader 和 Writer 接口都只定義了讀取或?qū)懭霐?shù)據(jù)字符的方式,也就是怎么讀或?qū)?#xff0c;但是沒有指明數(shù)據(jù)要寫到哪里,這里就涉及到磁盤或網(wǎng)絡(luò)的工作機(jī)制。
字節(jié)和字符轉(zhuǎn)化接口
前面說過,數(shù)據(jù)持久化或網(wǎng)絡(luò)傳輸都是以字節(jié)為單位進(jìn)行,所以必須有字符字節(jié)轉(zhuǎn)化工具。
字符編碼類結(jié)構(gòu)如圖,解碼有類似的結(jié)構(gòu);
從InputStream 到 Reader 的過程要指定編碼字符集,否則使用系統(tǒng)默認(rèn)的字符集,很可能會(huì)出現(xiàn)亂碼問題。StreamDecoder 正是完成從字節(jié)到字符的解碼的實(shí)現(xiàn)類。
try {
StringBuffer buffer = new StringBuffer();
char[] buf = new char[1024];
FileReader reader = new FileReader("file");
while (reader.read(buf) > 0) {
buffer.append(buf);
}
buffer.toString();
} catch (Exception e) {
}
FileReader 就是按照上面的工作方式讀取文件的,FileReader 繼承了 InputStreamReader ,實(shí)際上是讀取文件流,然后通過StreamDecoder 解碼成 char,只不過這里的解碼字符集是默認(rèn)字符集。
通過 OutputStreamWriter 類完成了從字符到字節(jié)的編碼過程,由 StreamEncoder 完成編碼過程。
總結(jié)
以上是生活随笔為你收集整理的java io 结构_java 的IO类库的基本架构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北交所限价申报应当符合的条件
- 下一篇: java编程语言大全_JAVA编程语言的