字节流
IO(Input Output)流
IO流用來處理設(shè)備之間的數(shù)據(jù)傳輸
Java對數(shù)據(jù)的操作是通過流的方式
Java用于操作流的類都在IO包中
流按流向分為兩種:輸入流,輸出流。
流按操作類型分為兩種:字節(jié)流與字符流。
字節(jié)流可以操作任何數(shù)據(jù),字符流只能操作純字符數(shù)據(jù),比較方便。
IO流常用父類
字節(jié)流的抽象父類:
InputStream ,OutputStream
字符流的抽象父類:
Reader , Writer
讀取文件
創(chuàng)建FileInputStream對象, 指定一個(gè)文件. 文件必須存在, 不存在則會(huì)拋出FileNotFoundException
使用read()方法可以從文件中讀取一個(gè)字節(jié). 如果讀取到文件末尾會(huì)讀到-1
讀取結(jié)束后需要釋放資源, 調(diào)用close()方法關(guān)閉輸入流
寫出文件
創(chuàng)建FileOutputStream對象, 指定一個(gè)文件. 文件不存在會(huì)創(chuàng)建新文件, 存在則清空原內(nèi)容. 如果需要追加, 在構(gòu)造函數(shù)中傳入true.
使用write()方法可以向文件寫出一個(gè)字節(jié).
寫出結(jié)束后同樣需要調(diào)用close()
拷貝文件
可以從文件中逐個(gè)字節(jié)讀取, 逐個(gè)字節(jié)寫出, 但這樣做效率非常低
我們可以定義一個(gè)數(shù)組作為緩沖區(qū), 一次讀取多個(gè)字節(jié)裝入數(shù)組, 然后再一次性把數(shù)組中的字節(jié)寫出
使用FileInputStream和FileOutputStream, 逐個(gè)字節(jié)拷貝
使用FileInputStream和FileOutputStream, 定義一個(gè)大數(shù)組(length等于文件大小), 一次性拷貝
使用FileInputStream和FileOutputStream, 定義一個(gè)小數(shù)組(例如1024), 多次拷貝
使用BufferedInputStream和BufferedOutputStream內(nèi)置的緩沖區(qū), 逐個(gè)字節(jié)拷貝
常用方法 InputStream: read() 讀取一個(gè)字節(jié) read(byte[]) 讀取若干(數(shù)組長度)字節(jié) available() 獲取可讀的字節(jié)數(shù) close() 關(guān)閉流, 釋放資源 OutputStream: write(int) 寫出一個(gè)字節(jié) write(byte[]) 寫出數(shù)組中的所有字節(jié) write(byte[],start,len); close() 關(guān)閉流, 釋放資源
BufferedInputStream
BufferedInputStream內(nèi)置了一個(gè)緩沖區(qū)(數(shù)組)
從BufferedInputStream中讀取一個(gè)字節(jié)時(shí)
BufferedInputStream會(huì)一次性從文件中讀取8192個(gè), 存在緩沖區(qū)中, 返回給程序一個(gè)
程序再次讀取時(shí), 就不用找文件了, 直接從緩沖區(qū)中獲取
直到緩沖區(qū)中所有的都被使用過, 才重新從文件中讀取8192個(gè)
BufferedOutputStream
BufferedOutputStream也內(nèi)置了一個(gè)緩沖區(qū)(數(shù)組)
程序向流中寫出字節(jié)時(shí), 不會(huì)直接寫到文件, 先寫到緩沖區(qū)中
直到緩沖區(qū)寫滿, BufferedOutputStream才會(huì)把緩沖區(qū)中的數(shù)據(jù)一次性寫到文件里
總結(jié):
在字節(jié)流中什么文件都可以讀取
所有的文件都是通過0101的數(shù)據(jù)進(jìn)行轉(zhuǎn)換而得到的
緩沖區(qū)是為了提高字節(jié)傳輸?shù)男?/p>
總結(jié)
- 上一篇: 宋祖儿吻戏(拉莱娜裸照)
- 下一篇: 微粒贷忘了还款一天后果 第二天需要及时