日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java io 结构_java 的IO类库的基本架构

發布時間:2024/10/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java io 结构_java 的IO类库的基本架构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java IO 操作的類在java.io 包中,大概可以分為以下幾組:

基于字節操作的接口:InputStream 和 OutputStream

基于字符操作的接口:Writer 和 Reader

基于磁盤操作的接口:File 相關

基于網絡操作的接口:Socket 相關

前兩個是數據格式區分,后兩個是傳輸方式區分。IO 只是人機交互的手段,除了完成交互功能,我們關注的就是如何提高他的運行效率了,而數據格式和傳輸方式是影響效率的最關鍵的因素。

基于字節操作的接口

以下是 InputStream 的類層次關系圖

其實還有很多子類沒有展示出來,每個子類對應處理不同的操作類型。

以下是 OutputStream 的類層次關系圖

兩個要點:

1、操作數據的方式可以組合使用

2、必須制定流最終寫到什么地方:要么是磁盤,要么是網絡中。其實寫網絡也是寫磁盤,只是需要讓操作系統再將數據傳送到其他地方,而不是本地磁盤。

基于字符操作的接口

不管是磁盤還是網絡傳輸,最小的存儲單元都是字節,而不是字符,所以IO操作的都是字節而不是字符,但是為什么有操作字符的IO接口呢?

這是因為我們程序操作的數據都是字符形式的,為了方便操作當然要提供直接寫字符的IO接口。

Writer 類層次結構

Reader 類層次結構

Reader 和 Writer 接口都只定義了讀取或寫入數據字符的方式,也就是怎么讀或寫,但是沒有指明數據要寫到哪里,這里就涉及到磁盤或網絡的工作機制。

字節和字符轉化接口

前面說過,數據持久化或網絡傳輸都是以字節為單位進行,所以必須有字符字節轉化工具。

字符編碼類結構如圖,解碼有類似的結構;

從InputStream 到 Reader 的過程要指定編碼字符集,否則使用系統默認的字符集,很可能會出現亂碼問題。StreamDecoder 正是完成從字節到字符的解碼的實現類。

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 ,實際上是讀取文件流,然后通過StreamDecoder 解碼成 char,只不過這里的解碼字符集是默認字符集。

通過 OutputStreamWriter 類完成了從字符到字節的編碼過程,由 StreamEncoder 完成編碼過程。

總結

以上是生活随笔為你收集整理的java io 结构_java 的IO类库的基本架构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。