轉(zhuǎn)載自并發(fā)編程網(wǎng) – ifeve.com本文鏈接地址:Java IO: 流
Java IO的用途匯總:
文件訪問
網(wǎng)絡(luò)訪問
內(nèi)存緩存訪問
線程內(nèi)部通信(管道)
緩沖
過濾
解析
讀寫文本 (Readers / Writers)
讀寫基本類型數(shù)據(jù) (long, int etc.)
讀寫對象
1.流和數(shù)組的區(qū)別
流和數(shù)組不一樣,不能通過索引讀寫數(shù)據(jù)。
在流中,你也不能像數(shù)組那樣前后移動讀取數(shù)據(jù),除非使用RandomAccessFile 處理文件。
流僅僅只是一個連續(xù)的數(shù)據(jù)流。
流中的數(shù)據(jù)只能夠順序訪問。
某些類似PushbackInputStream 流的實(shí)現(xiàn)允許你將數(shù)據(jù)重新推回到流中,以便重新讀取。然而你只能把有限的數(shù)據(jù)推回流中,并且你不能像操作數(shù)組那樣隨意讀取數(shù)據(jù)。
2.Java IO流的分類
字節(jié)流:通常以“stream”命名,比如InputStream和OutputStream。除了DataInputStream 和DataOutputStream 還能夠讀寫int, long, float和double類型的值以外,其他流在一個操作時間內(nèi)只能讀取或者寫入一個原始字節(jié)。
字符流:通常以“Reader”或者“Writer”命名。字符流能夠讀寫字符(比如Latin1或者Unicode字符【1個字符占2個字節(jié)】)??梢詾g覽Java Readers and Writers獲取更多關(guān)于字符流輸入輸出的信息。
節(jié)點(diǎn)流:程序用于直接操作目標(biāo)設(shè)備所對應(yīng)的類叫節(jié)點(diǎn)流。比如FileInputStream;
處理流:程序通過一個間接流類去調(diào)用節(jié)點(diǎn)流類,以達(dá)到更加靈活方便地讀寫各種類型的數(shù)據(jù),這個間接流類就是處理流。比如BufferedInputStream;
https://blog.csdn.net/jingzi123456789/article/details/72123937
輸入流的基類InputStream
輸出流的基類OutputStream
組合流BufferedIntputStream/BufferedOutputStream(提供緩存區(qū))
BufferedIntputStream/BufferedOutputStream 默認(rèn)大小為8*1024B(8KB),為了更好地使用內(nèi)置緩沖區(qū)的磁盤,同樣建議把緩沖區(qū)大小設(shè)置成1024的整數(shù)倍。
---------------------------------------------------------------------------------------------------------------DataInputStream/DataOutputStream 讀取/寫入Java基本類型數(shù)據(jù)
Java IO類概述表

BIO,NIO,AIO
BIO:同步阻塞I/O模式,數(shù)據(jù)的讀取寫入必須阻塞在一個線程內(nèi)等待其完成。
NIO:同步非阻塞的I/O模型,在Java 1.4 中引入了NIO框架,對應(yīng) java.nio 包,提供了 Channel , Selector,Buffer等抽象。
AIO (Asynchronous I/O):異步非阻塞的IO模型。異步 IO 是基于事件和回調(diào)機(jī)制實(shí)現(xiàn)的,也就是應(yīng)用操作之后會直接返回,不會堵塞在那里,當(dāng)后臺處理完成,操作系統(tǒng)會通知相應(yīng)的線程進(jìn)行后續(xù)的操作。