Java數(shù)據(jù)流,有寫(xiě)入寫(xiě)出之分额各;還有byte數(shù)據(jù),和char(文字)數(shù)據(jù)之分吧恃。
基本涵蓋所有情況,其他只是使用更簡(jiǎn)潔的類(lèi)來(lái)操作痕寓。
先看看Java基本數(shù)據(jù)有(總體如下圖):
一缸逃,引用型(reference):
二厂抽,基本型(primitive):
2.1數(shù)字型(整型):
byte short int long char,分別用8筷凤、16昭殉、32、64挪丢、16bits表示蹂风。
2.2浮點(diǎn)型:
float(32bit),double(64bit)
2.3整型字面值
2惠啄、8、16進(jìn)制的表示分別在最前面加上0B(0b)任内、0、0X(0x)即可
2.4字符及字符串字面值
\ddd(八進(jìn)制)死嗦、\uxxxx(十六進(jìn)制Unicode字符)趋距、'(單引號(hào))越除、"(雙引號(hào))、\(反斜杠)\r(回車(chē)符)\n(換行符)\f(換頁(yè)符)\t(制表符)\b(回格符)
屏幕快照 2016-08-25 上午10.43.22.png
/**
* 字符文件,讀入內(nèi)存(讀文件)
* 字符文件摘盆,讀出內(nèi)存(寫(xiě)到文件中去)
*
* byte[]文件,讀入內(nèi)存(讀文件)
* byte[]文件翼雀,讀出內(nèi)存(寫(xiě)到文件中去)
*如:png孩擂,jpg等文件,的讀寫(xiě)
*轉(zhuǎn)化流:InputStreamReader/OutputStreamWriter,把字節(jié)轉(zhuǎn)化成字符肋殴。
*數(shù)據(jù)流:DataInputStream,DataOutputStream坦弟。
*/
private static voidbyteFile2PureDataFile()throwsIOException {
//步驟一:準(zhǔn)備好要讀入內(nèi)存的文件
//情況1:復(fù)制純數(shù)據(jù)
//File file = new File("/Users/users/Desktop/BugHunt.mp3");
//File file = new File("/Users/users/Desktop/old.png");
//情況2:復(fù)制字符等數(shù)據(jù)
File file =newFile("/Users/users/Desktop/old.txt");
//文件轉(zhuǎn)化為文件流
FileInputStream fileInputStream =newFileInputStream(file);
//情況1:以數(shù)據(jù)流的形式將數(shù)據(jù)讀入到內(nèi)存(使用DataInputStream,BUfferedInputStream都可以)
//BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
//情況2:以字符形式將數(shù)據(jù)讀入到內(nèi)存(字符,圖片在內(nèi)存中的存儲(chǔ)格式的區(qū)別)
InputStreamReader inputStreamReader =newInputStreamReader(fileInputStream);
//步驟二:準(zhǔn)備好要寫(xiě)出內(nèi)存的文件
//情況1:復(fù)制純數(shù)據(jù)
//File fileNew = new File("/Users/users/Desktop/new.mp3");
//File fileNew = new File("/Users/users/Desktop/new.png");
//情況2:復(fù)制文字,字符等
File fileNew =newFile("/Users/users/Desktop/new.txt");
//文件轉(zhuǎn)化為文件流
FileOutputStream fileOutputStream =newFileOutputStream(fileNew);
//情況1:以數(shù)據(jù)形式將數(shù)據(jù)導(dǎo)出內(nèi)存(使用DataOutputStream,BUfferedOutputStream都可以)
//BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
//情況2:以字符形式將數(shù)據(jù)導(dǎo)出內(nèi)存,
OutputStreamWriter outputStreamWriter =newOutputStreamWriter(fileOutputStream);
//小勺子
//情況1:以數(shù)據(jù)形式將數(shù)據(jù)導(dǎo)出內(nèi)存
//byte[] cache = new byte[1024];//情況一:拷貝數(shù)據(jù):圖片,音頻等數(shù)據(jù)的小勺子,就必須使用字節(jié)數(shù)組
//情況2:復(fù)制字符等數(shù)據(jù)
//char[] cache = new char[1024];//情況二:拷貝字符串的小勺子,就必須使用字符數(shù)組
//讀到的長(zhǎng)度(read()返回的值,可以作為單個(gè)字符的內(nèi)容酿傍,也可以在使用cache時(shí)作為長(zhǎng)度來(lái)指示)
//情況1:以數(shù)據(jù)形式將數(shù)據(jù)導(dǎo)出內(nèi)存
//int len = bufferedInputStream.read(cache);
//情況2:復(fù)制字符等數(shù)據(jù)
intcontent =0;//不用cache,字符串為整形數(shù),然后由系統(tǒng)軟件等自己去解析,這樣肯定會(huì)有亂碼
//情況一:以數(shù)據(jù)形式將數(shù)據(jù)導(dǎo)出內(nèi)存
//while (len != -1) {
//情況2:復(fù)制字符等數(shù)據(jù)
//while (((content = inputStreamReader.read(cache))!= -1)) {
while(((content = inputStreamReader.read()) != -1)) {
//情況1:以數(shù)據(jù)形式將數(shù)據(jù)導(dǎo)出內(nèi)存
//bufferedOutputStream.write(cache, 0, len);
//情況2:復(fù)制字符等數(shù)據(jù)
//outputStreamWriter.write(cache, 0, content);//用cache
outputStreamWriter.write(content);//不用cache
//情況1:(比較特殊的地方)以數(shù)據(jù)形式將數(shù)據(jù)導(dǎo)出內(nèi)存//byte文件,讀取小勺子的長(zhǎng)度,這里一定要每次更新長(zhǎng)度
//len = bufferedInputStream.read(cache);
}
//最后注意關(guān)流的順序(先關(guān)流入內(nèi)存的數(shù)據(jù),再關(guān)流出內(nèi)存的數(shù)據(jù))情況1:以數(shù)據(jù)形式將數(shù)據(jù)導(dǎo)出內(nèi)存
//bufferedInputStream.close();
//情況2:復(fù)制字符等數(shù)據(jù)
//inputStreamReader.close();
fileInputStream.close();
//情況1:以數(shù)據(jù)形式將數(shù)據(jù)導(dǎo)出內(nèi)存
//bufferedOutputStream.close();
//情況2:復(fù)制字符等數(shù)據(jù)
outputStreamWriter.close();
fileOutputStream.close();
}
常用I/O流
字節(jié)輸入流
字節(jié)輸出流
字符輸入流
字符輸出流