1.輸入和輸出:
輸入:inputStream,從多種起源地讀取數據輸入到內存中;這些起源地包括如下:
1)字節數組
2)String對象
3)文件
4)管道
5)socket
衍生類:
ByteArrayInputStream字節緩衝區讀取;
DataInputStream基本類型讀取;
StringBufferInputStream字符串緩衝流讀取;
FileInputStream文件緩衝流;
PipedInputStream管道緩衝流;
緩衝流對於inputStream來說,讀取效率要高,但是,要注意在使用完畢之後,關閉緩衝流,釋放掉相應的緩衝內存。
輸出:outputStream,將內存數據寫入到指定的目的地;
ByteArrayOutputStream 字節緩衝區寫入;
DataOutputStream基本類型數據寫入;支持多種基本類型的write
FileOutputStream文件緩衝寫入;
PipedOutputStream管道緩衝寫入;
RandomAccessFile:
用來訪問那些保存數據記錄的文件的,可以用seek()進行訪問,且進行讀寫;還可以實現文件的大小,跳過指定長度等;
不是inputStream和outputStream的衍生類;
File類:既代表一個特定文件名字,又代表目錄內一系列文件的名字;
Reader/Writer與InputStream/OutputStream的關係:
1)並不是Reader/Writer替換了InputStream/OutputStream,而是保持向後兼容;
2)InputStream/OutputStream是java1.0提供的;Reader/Writer是java1.1提供的;
3)InputStream只支持8位字節流,Reader/Writer支持16位字節流,(java內含的char是16位的Unicode);
4)未做改動的幾個stream:
DataOutputStream 作爲一種按數據格式保存和獲取數據的流
File
RandomAccessFile
SequenceInputStream
5)流轉換示例:
DataInputStream in=new DataInputStream( new BufferedInputStream( new FileInputStream("data.txt")));
BufferedReader inbr=new BufferedReader( new InputStreamReader(in));
in.readDouble();
inbr.readLine();
String s2=new String("sssss");
StringReader s2sr=new StringReader(s2);
文件解壓縮:
java1.1提供的壓縮類功能是從InputStream/OutputStream拓展出來的;
CheckedInputStream GetCheckSum() 附加驗證碼的解壓操作
CheckedOutputStream GetCheckSum() 附加驗證碼的壓縮操作
DeflaterOutputStream 用於壓縮類的基礎類:
ZipOutputStream DeflaterOutputStream 的拓展類,將數據壓縮成Zip文件格式;
GZIPOutputStream DeflaterOutputStream 的拓展類,將數據壓縮成GZIP文件格式;
DeflaterInputStream用於解壓類的基礎類:
ZipInputStream DeflaterInputStream的拓展類,解壓用Zip文件格式保存的數據;
GZIPInputStream DeflaterInputStream的拓展類,解壓用GZIP文件格式保存的數據;
注意:在使用GZIP進行解壓縮時,如果要支持中文,則將編碼方式設置爲GBK;
ASCII GBK uncode utf-8(utf-16)的關係:
都是字符編碼,字符只有被編碼後纔可以被計算機識別,而轉換後的就稱之爲計算機的內碼,早期的計算機使用7位的ASCII編碼,爲了處理漢字,程序員設計了用於簡體中文的GB2312和用於繁體中文的big5。
GBK編碼長度是兩個字節,包含全部中文,utf-8是因爲一個字節,漢字三個字節,它是由uncode發展而來的,uncode支持全世界的文字編碼;utf-8針對英文編碼效率更高;
UTF-8就是以8位爲單元對UCS進行編碼;UTF-16以16位爲單元對UCS進行編碼;uncode只是一個編碼方案,而utf編碼則要用於實際傳輸;GBK也要用於實際傳輸;
ASCII、GB2312、GBK到GB18030的編碼方法是向下兼容的。而Unicode只與ASCII兼容(更準確地說,是與ISO-8859-1兼容),與GB碼不兼容 如果GBK要轉UTF-8必須先轉uncode碼,再轉utf-8就OK了.