java中數據內存操作內存中的具體容量, 例如: byte[] buf = new byte[1024], 這只能操作byte的長度,byte.length, 當存儲一些字節, 想清楚地知道里面占了多少個字節, 是無法做到的. 其已經被封裝在最底層了. 因此, 我們去操作IO流時, 要操作相對應的數據內存, 就找對應的類, 以下就是IO大家族的分類:


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




JDK1.4版本開始引入了新I/O類庫,它位于java.nio包中,新I/O類庫利用通道和緩沖區等來提高I/O操作的效率。
在java.io包中, java.io.InputStream 表示字節輸入流, java.io.OutputStream表示字節輸出流,處于java.io包最頂層。這兩個類均為抽象類,也就是說它們不能被實例化,必須生成子類之后才能實現一定的功能。
一、按I/O類型來總體分類:
1. Memory 1)從/向內存數組讀寫數據: CharArrayReader、 CharArrayWriter、ByteArrayInputStream、ByteArrayOutputStream 2)從/向內存字符串讀寫數據 StringReader、StringWriter、StringBufferInputStream 2.Pipe管道 實現管道的輸入和輸出(進程間通信): PipedReader、PipedWriter、PipedInputStream、PipedOutputStream 3.File 文件流。對文件進行讀、寫操作 :FileReader、FileWriter、FileInputStream、FileOutputStream 4. ObjectSerialization 對象輸入、輸出 :ObjectInputStream、ObjectOutputStream 5.DataConversion數據流 按基本數據類型讀、寫(處理的數據是Java的基本類型(如布爾型,字節,整數和浮點數)):DataInputStream、DataOutputStream 6.PRinting 包含方便的打印方法 :PrintWriter、PrintStream 7.Buffering緩沖 在讀入或寫出時,對數據進行緩存,以減少I/O的次數:BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream 8.Filtering 濾流,在數據進行讀或寫時進行過濾:FilterReader、FilterWriter、FilterInputStream、FilterOutputStream過 9.Concatenation合并輸入 把多個輸入流連接成一個輸入流 :SequenceInputStream 10.Counting計數 在讀入數據時對行記數 :LineNumberReader、LineNumberInputStream 11.Peeking Ahead 通過緩存機制,進行預讀 :PushbackReader、PushbackInputStream 12.Converting between Bytes and Characters 按照一定的編碼/解碼標準將字節流轉換為字符流,或進行反向轉換(Stream到Reader,Writer的轉換類):InputStreamReader、OutputStreamWriter
二、按數據來源(去向)分類: 1、File(文件): FileInputStream, FileOutputStream, FileReader, FileWriter 2、byte[]:ByteArrayInputStream, ByteArrayOutputStream 3、Char[]: CharArrayReader, CharArrayWriter 4、String: StringBufferInputStream, StringReader, StringWriter 5、網絡數據流:InputStream, OutputStream, Reader, Writer
..............................................................................................................................................................................................................
因此, 實現獲取文件的字節方式如下:
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
新聞熱點
疑難解答