IO别威、NIO

IO、NIO

Java NIO和IO之間第一個最大的區(qū)別是驴剔,IO是面向流的省古,NIO是面向緩沖區(qū)的。 Java IO面向流意味著每次從流中讀一個或多個字節(jié)丧失,直至讀取所有字節(jié)豺妓,它們沒有被緩存在任何地方。此外布讹,它不能前后移動流中的數(shù)據(jù)琳拭。如果需要前后移動從流中讀取的數(shù)據(jù),需要先將它緩存到一個緩沖區(qū)描验。 Java NIO的緩沖導向方法略有不同白嘁。數(shù)據(jù)讀取到一個它稍后處理的緩沖區(qū),需要時可在緩沖區(qū)中前后移動挠乳。這就增加了處理過程中的靈活性权薯。但是,還需要檢查是否該緩沖區(qū)中包含所有您需要處理的數(shù)據(jù)睡扬。而且,需確保當更多的數(shù)據(jù)讀入緩沖區(qū)時黍析,不要覆蓋緩沖區(qū)里尚未處理的數(shù)據(jù)卖怜。

IO流包括字節(jié)流和字符流:

字節(jié)流:對應抽象類為InputStream(輸入流)和 OutputStream(輸出流)。 FileInputStream阐枣、FileOutputStream

字符流:對應抽象類為Reader(輸入流)和Writer(輸出流)马靠。BufferedReader、InputStreamReader蔼两、 StringReader

IO

裝飾器模式

磁盤操作

  • File

保存文件的基本信息甩鳄,文件路徑等,不保存文件內(nèi)容

字節(jié)操作

  • InputStream

子類裝飾器提供額外的功能:FileInputStream,StringBufferInputStream,ByteArrayInputStream,FilterInputStream(PushbackInputStream,BufferedInputStream,DataInputStream,LineNumberInputStream)

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("path")))
byte[] buf = new  byte[20 * 1024];
int bytes = 0;
while((bytes = in.read(buf, 0, buf.length)) != -1){
}
  • OutputStream


    bytes

字符操作

一般情況下操作的都是字符流

  • Reader

inputStreamReader支持從文本文件的字節(jié)流轉(zhuǎn)換為字符流-解碼

byte[] bytes = str.getBytes(encoding);//編碼
String str = new String(bytes, encoding);//解碼
  • Writer

outputSreamWriter支持字符流編碼轉(zhuǎn)換為文本文件字節(jié)流-編碼

對象操作

  • Serializable

序列化额划,對象需要實現(xiàn)serializable接口妙啃,transiend修飾的變量不進行序列化

ObjectOutputStream.writObject()//序列化
ObjectInputStream.readObject()//反序列化

網(wǎng)絡操作

  • Socket

NIO

高速的面向塊的IO
一次處理數(shù)據(jù)塊,比按流處理要快俊戳,但是面向塊的IO缺少一些面向流IO所具有的優(yōu)雅性和簡單性

  • 通道

通道Channel是對原IO包中的流的模擬揖赴,可以通過他讀取和寫入數(shù)據(jù)。
通道與流的區(qū)別是抑胎,流操作都是單向的如InputStream/OutputStream燥滑,而通道是雙向的,一個Channel就可完成讀寫兩個操作

- FileChannel 從文件中讀寫數(shù)據(jù)
- DatagramChannel 通過UDP讀寫網(wǎng)絡數(shù)據(jù)
- SocketChannel 通過TCP讀寫網(wǎng)絡數(shù)據(jù)
- ServerSocketChannel 監(jiān)聽新進來的TCP鏈接阿逃,對每一個新的連接都會創(chuàng)建一個SocketChannel
  • 緩沖區(qū)

通道在讀寫數(shù)據(jù)之前铭拧,都需要將目標對象放入到緩沖區(qū)中赃蛛,緩沖區(qū)實質(zhì)是一個數(shù)組,提供了對數(shù)據(jù)的結(jié)構(gòu)化訪問搀菩,還可以跟蹤系統(tǒng)的讀寫進程

- ByteBuffer
- CharBuffer
- ShortBuffer
- IntBuffer
- LongBuffer
- FloatBuffer
- DoubleBuffer
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末焊虏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子秕磷,更是在濱河造成了極大的恐慌诵闭,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澎嚣,死亡現(xiàn)場離奇詭異疏尿,居然都是意外死亡,警方通過查閱死者的電腦和手機易桃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門褥琐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晤郑,你說我怎么就攤上這事敌呈。” “怎么了造寝?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵磕洪,是天一觀的道長。 經(jīng)常有香客問我诫龙,道長析显,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任签赃,我火速辦了婚禮谷异,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锦聊。我一直安慰自己歹嘹,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布孔庭。 她就那樣靜靜地躺著尺上,像睡著了一般。 火紅的嫁衣襯著肌膚如雪史飞。 梳的紋絲不亂的頭發(fā)上尖昏,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音构资,去河邊找鬼抽诉。 笑死,一個胖子當著我的面吹牛吐绵,可吹牛的內(nèi)容都是我干的迹淌。 我是一名探鬼主播河绽,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唉窃!你這毒婦竟也來了耙饰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤纹份,失蹤者是張志新(化名)和其女友劉穎苟跪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔓涧,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡件已,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了元暴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片篷扩。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖茉盏,靈堂內(nèi)的尸體忽然破棺而出鉴未,到底是詐尸還是另有隱情,我是刑警寧澤鸠姨,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布铜秆,位于F島的核電站,受9級特大地震影響享怀,放射性物質(zhì)發(fā)生泄漏羽峰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一添瓷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧值纱,春花似錦鳞贷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疆偿,卻和暖如春咱筛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杆故。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工迅箩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人处铛。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓饲趋,卻偏偏與公主長得像拐揭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奕塑,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自 http://www.ibm.com/developerworks/cn/education/java/j-...
    抓兔子的貓閱讀 2,310評論 0 22
  • Java NIO(New IO)是從Java 1.4版本開始引入的一個新的IO API堂污,可以替代標準的Java I...
    JackChen1024閱讀 7,555評論 1 143
  • Java 的 I/O 操作類在包 java.io 下,大概有將近 80 個類龄砰,但是這些類大概可以分成四組盟猖,分別是:...
    Tycc閱讀 335評論 0 0
  • 概覽 IO是Java中的最重要的一個部分. 其中, java.io是所有編程者都應該掌握的IO方式. 在Java ...
    斜陽一樹待鴉歸閱讀 11,801評論 3 28
  • 在一段時間,心里研究者對影響在世界上極少數(shù)居民的一個奇怪現(xiàn)象感興趣换棚。他發(fā)生時挪威人叫他為“黑暗時代式镐,”在每年的二個...
    楊秀華閱讀 160評論 0 1