java中數(shù)據(jù)內(nèi)存操作內(nèi)存中的具體容量, 例如: byte[] buf = new byte[1024], 這只能操作byte的長(zhǎng)度,byte.length, 當(dāng)存儲(chǔ)一些字節(jié), 想清楚地知道里面占了多少個(gè)字節(jié), 是無(wú)法做到的. 其已經(jīng)被封裝在最底層了. 因此, 我們?nèi)ゲ僮鱅O流時(shí), 要操作相對(duì)應(yīng)的數(shù)據(jù)內(nèi)存, 就找對(duì)應(yīng)的類, 以下就是IO大家族的分類:


Java中其他多種多樣變化的流均是由它們派生出來(lái)的:




JDK1.4版本開(kāi)始引入了新I/O類庫(kù),它位于java.nio包中,新I/O類庫(kù)利用通道和緩沖區(qū)等來(lái)提高I/O操作的效率。
在java.io包中, java.io.InputStream 表示字節(jié)輸入流, java.io.OutputStream表示字節(jié)輸出流,處于java.io包最頂層。這兩個(gè)類均為抽象類,也就是說(shuō)它們不能被實(shí)例化,必須生成子類之后才能實(shí)現(xiàn)一定的功能。
一、按I/O類型來(lái)總體分類:
1. Memory 1)從/向內(nèi)存數(shù)組讀寫(xiě)數(shù)據(jù): CharArrayReader、 CharArrayWriter、ByteArrayInputStream、ByteArrayOutputStream 2)從/向內(nèi)存字符串讀寫(xiě)數(shù)據(jù) StringReader、StringWriter、StringBufferInputStream 2.Pipe管道 實(shí)現(xiàn)管道的輸入和輸出(進(jìn)程間通信): PipedReader、PipedWriter、PipedInputStream、PipedOutputStream 3.File 文件流。對(duì)文件進(jìn)行讀、寫(xiě)操作 :FileReader、FileWriter、FileInputStream、FileOutputStream 4. ObjectSerialization 對(duì)象輸入、輸出 :ObjectInputStream、ObjectOutputStream 5.DataConversion數(shù)據(jù)流 按基本數(shù)據(jù)類型讀、寫(xiě)(處理的數(shù)據(jù)是Java的基本類型(如布爾型,字節(jié),整數(shù)和浮點(diǎn)數(shù))):DataInputStream、DataOutputStream 6.PRinting 包含方便的打印方法 :PrintWriter、PrintStream 7.Buffering緩沖 在讀入或?qū)懗鰰r(shí),對(duì)數(shù)據(jù)進(jìn)行緩存,以減少I/O的次數(shù):BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream 8.Filtering 濾流,在數(shù)據(jù)進(jìn)行讀或?qū)憰r(shí)進(jìn)行過(guò)濾:FilterReader、FilterWriter、FilterInputStream、FilterOutputStream過(guò) 9.Concatenation合并輸入 把多個(gè)輸入流連接成一個(gè)輸入流 :SequenceInputStream 10.Counting計(jì)數(shù) 在讀入數(shù)據(jù)時(shí)對(duì)行記數(shù) :LineNumberReader、LineNumberInputStream 11.Peeking Ahead 通過(guò)緩存機(jī)制,進(jìn)行預(yù)讀 :PushbackReader、PushbackInputStream 12.Converting between Bytes and Characters 按照一定的編碼/解碼標(biāo)準(zhǔn)將字節(jié)流轉(zhuǎn)換為字符流,或進(jìn)行反向轉(zhuǎn)換(Stream到Reader,Writer的轉(zhuǎn)換類):InputStreamReader、OutputStreamWriter
二、按數(shù)據(jù)來(lái)源(去向)分類: 1、File(文件): FileInputStream, FileOutputStream, FileReader, FileWriter 2、byte[]:ByteArrayInputStream, ByteArrayOutputStream 3、Char[]: CharArrayReader, CharArrayWriter 4、String: StringBufferInputStream, StringReader, StringWriter 5、網(wǎng)絡(luò)數(shù)據(jù)流:InputStream, OutputStream, Reader, Writer
..............................................................................................................................................................................................................
因此, 實(shí)現(xiàn)獲取文件的字節(jié)方式如下:
public void copy() throws IOException{ byte[] buf = new byte[1024]; InputStream in = new FileInputStream("d:/360/female.jpg"); int length = 0; ByteArrayOutputStream output = new ByteArrayOutputStream(); while((length = in.read(buf)) != -1 ){ output.write(buf, 0, length); } System.out.println(output.toByteArray().length); }參考鏈接: http://blog.csdn.net/hguisu/article/details/7418161
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注