您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java的標(biāo)準(zhǔn)數(shù)據(jù)流有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java的標(biāo)準(zhǔn)數(shù)據(jù)流有哪些”吧!
Java輸入輸出(I/O)API是Java里最重要的API之一。Java I/O提供了許多API提供對(duì)文件,內(nèi)存,socket的讀寫。
Java里的流(Stream)概念:
流是一種有序的字節(jié)數(shù)據(jù)對(duì)象。流又分為輸入流(InputStream)和輸出流(OutputStream)。輸入流從外部資源(文件,內(nèi)存,socket等)讀入字節(jié)數(shù)據(jù)到Java對(duì)象;輸出流則把Java對(duì)象(字節(jié)數(shù)據(jù)等)寫入到外部資源。
所有Java I/O都可歸類為以下兩種:
1,字節(jié)數(shù)據(jù)輸入輸出I/O
2,文字列數(shù)據(jù)輸入輸出I/O
所有的字節(jié)數(shù)據(jù)輸入輸出I/O都繼承自java.io.InputStream和java.io.OutputStream接口。
字節(jié)數(shù)據(jù)輸入流及其派生類:
java.io.InputStream +--java.io.ByteArrayInputStream +--java.io.BufferedInputStream +--java.io.DataInputStream +--java.io.FileInputStream +--java.io.FilterInputStream +--java.io.ObjectInputStream +--java.io.PipedInputStream +--java.io.PushbackInputStream +--java.io.SequenceInputStream +--java.io.StringBufferInputStream
字節(jié)數(shù)據(jù)輸出流及其派生類:
java.io.OutputStream +--java.io.BufferedOutputStream +--java.io.ByteArrayOutputStream +--java.io.DataOutputStream +--java.io.FileOutputStream +--java.io.FilterOutputStream +--java.io.ObjectOutputStream +--java.io.PipedOutputStream
所有的文字列數(shù)據(jù)輸入輸出I/O都繼承自java.io.Reader和java.io.Writer接口。
文字列數(shù)據(jù)輸入流及其派生類:
java.io.Reader +--java.io.BufferedReader +--java.io.CharArrayReader +--java.io.FileReader +--java.io.FilterReader +--java.io.InputStreamReader +--java.io.LineNumberReader +--java.io.PipedReader +--java.io.PushbackReader +--java.io.StringReader
文字列數(shù)據(jù)輸出流及其派生類:
java.io.Writer +--java.io.BufferedWriter +--java.io.CharArrayWriter +--java.io.FilterWriter +--java.io.OutputStreamWriter +--java.io.FileWriter +--java.io.PipedWriter +--java.io.PrintWriter +--java.io.StringWriter
它們(java.io)之間的關(guān)系可以用下圖來表示:
JDK 1.4以前的版本的Java I/O操作集中在java.io這個(gè)包中,是基于流的阻塞(blocking)API。
從JDK1.4開始引入了New I/O(NIO)API。該API包含在java.nio.*里。NIO有時(shí)也叫做nonblocking I/O(非阻塞I/O),NIO基于緩沖區(qū),并能提供非阻塞(non-blocking)IO操作。
NIO主要包:
java.nio
定義了Buffer及其數(shù)據(jù)類型相關(guān)的子類。
java.nio.channels
定義了高速文件處理/socket通信處理等I/O處理的Channel接口以及這些接口在文件系統(tǒng)和網(wǎng)絡(luò)通信等上的實(shí)現(xiàn)類。同時(shí)可以通過Selector類,提供了進(jìn)行非阻塞I/O操作的方法。該包是NIO API的核心包。
java.nio.charset
定義了字符編碼和解碼處理類。
NIO接口/類的層次結(jié)構(gòu):
java.nio.ByteBuffer java.nio.channels.Channel +--java.nio.channels.ServerSocketChannel +--java.nio.channels.ReadableByteChannel +--java.nio.channels.ScatteringByteChannel +--java.nio.channels.ByteChannel +--java.nio.channels.WritableByteChannel +--java.nio.channels.ByteChannel +--java.nio.channels.GatheringByteChannel java.nio.channels.Slector java.nio.channels.ScatteringByteChannel, ByteChannel, GatheringByteChannel +--java.nio.channels.FileChannel +--java.nio.channels.SocketChannel +--java.nio.channels.DatagramChannel java.nio.charset.Charset java.nio.charset.CharsetEncoderjava.nio.charset.CharsetDecoder
NIO層次結(jié)構(gòu)圖:
***節(jié) 數(shù)據(jù)流的基本概念
◆ 理解數(shù)據(jù)流
流一般分為輸入流(Input Stream)和輸出流(Output Stream)兩類,但這種劃分并不是絕對(duì)的。比如一個(gè)文件,當(dāng)向其中寫數(shù)據(jù)時(shí),它就是一個(gè)輸出流;當(dāng)從其中讀取數(shù)據(jù)時(shí),它就是一個(gè)輸入流。當(dāng)然,鍵盤只是一個(gè)數(shù)人流,而屏幕則只是一個(gè)輸出流。
◆ 的標(biāo)準(zhǔn)數(shù)據(jù)流
標(biāo)準(zhǔn)輸入輸出指在字符方式下(如DOS),程序與系統(tǒng)進(jìn)行交互的方式,分為三種:
標(biāo)準(zhǔn)輸入studin,對(duì)象是鍵盤。
標(biāo)準(zhǔn)輸出stdout,對(duì)象是屏幕。
標(biāo)準(zhǔn)錯(cuò)誤輸出stderr,對(duì)象也是屏幕。
例 8.1 從鍵盤輸入字符。
本例用System.in.read(buffer)從鍵盤輸入一行字符,存儲(chǔ)在緩沖區(qū)buffer中,count保存實(shí)際讀入的字節(jié)個(gè)數(shù),再以整數(shù)和字符兩種方式輸出buffer中的值。Read方法在java.io包中,而且要拋出IOException異常。程序如下:
import java.io.*; public class Input1 { public static void main(String args[]) throws IOException { System.out.println("Input: "); byte buffer[] = new byte[512]; //輸入緩沖區(qū) int count = System.in.read(buffer); //讀取標(biāo)準(zhǔn)輸入流 System.out.println("Output: "); for (int i=0;i<COUNT;I++) 輸出buffer元素值 { System.out.print(" "+buffer[i]); } System.out.println(); for (int i=0;i<COUNT;I++) 按字符方式輸出buffer { System.out.print((char) buffer[i]); } System.out.println("count = "+ count); //buffer實(shí)際長度 } }
程序中,main方法采用throws子句拋出IOException異常交由系統(tǒng)處理。
◆ Java.io包中的數(shù)據(jù)流及文件類
字節(jié)流:
從InputStream和OutputStream派生出來的一系列類。這類流以字節(jié)(byte)為基本處理單位。
InputStream、OutputStream
FileInputStream、FileOutputStream
PipedInputStream、PipedOutputStream
ByteArrayInputStream、ByteArrayOutputStream
FilterInputStream、FilterOutputStream
DataInputStream、DataOutputStream
BufferedInputStream、BufferedOutputStream
字符流:
從Reader和Writer派生出的一系列類,這類流以16位的Unicode碼表示的字符為基本處理單位
Reader、Writer
InputStreamReader、OutputStreamWriter
FileReader、FileWriter
CharArrayReader、CharArrayWriter
PipedReader、PipedWriter
FilterReader、FilterWriter
BufferedReader、BufferedWriter
StringReader、StringWriter
感謝各位的閱讀,以上就是“Java的標(biāo)準(zhǔn)數(shù)據(jù)流有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Java的標(biāo)準(zhǔn)數(shù)據(jù)流有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。