日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IO流概览

發(fā)布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IO流概览 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用流后,一定要記得關閉,不然會一直保持內存與某個文件的通話。舉個栗子,如果你向某個文件里傳了數(shù)據(jù)后沒close(),則你想刪除這個文件,那么系統(tǒng)會提示你該文件正被某個程序使用而無法刪除。
1. IO流模型

本來是有一張圖片描述的,因為該博客相對來說十分不完美,用戶體驗也一般般,只能寫兩句文字代替了:

輸入流:由硬盤或是其他存儲的數(shù)據(jù)向電腦內存發(fā)送產(chǎn)生的數(shù)據(jù)流。 輸出流:由電腦內存向硬盤等其他地方發(fā)送數(shù)據(jù)產(chǎn)生的流。

所以IO流的里的輸入輸出是針對內存來說的。

InputStream和Reader的移動記錄指針的方法:

void mark(int readAheadLimit): //在記錄指針當前位置記下一個標記(mark)。 void reset(): //將此輸入流的記錄指針重新定位到上一次記錄標記(mark)的位置。 long skip(long n): //記錄指針向前移動n個字節(jié)/字符 boolean markSupported(): //判斷此輸入流是否支持mark()操作,即是否技持記錄標記。

2.節(jié)點流: 可以向一個特定的設備(硬盤、網(wǎng)絡)讀/寫數(shù)據(jù)的流。都以物理IO節(jié)點為構造器參數(shù)。

常見節(jié)點流:
文 件: FileInputStream FileOutputStrean FileReader FileWriter
數(shù) 組: ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter
字符串:StringReader StringWriter
管 道:PipedInputStream PipedOutputStream PipedReader PipedWriter


3.處理流:對已經(jīng)存在的流(節(jié)點流)進行連接或封裝后再實現(xiàn)讀寫。 使用處理流的好處是,使用同一處理流,可訪問不同節(jié)點流。以存在的流為構造器參數(shù)。關閉處理流時,被包裝的節(jié)點流自動關閉。

常見處理流:
緩沖流:BufferedInputStream、BufferedOutputStream,BufferedReader BufferedWriter
轉換流:InputStreamReader OutputStreamWriter
數(shù)據(jù)流:DataInputStream DataOutputStream
推回輸入流:PushbackInputStream,PushbackReader
其他:PrintStream


4.字節(jié)流: 操作的數(shù)據(jù)單元是8位字節(jié),以InputStreamt、OutputStream作為基類。


5 字符流:操作的數(shù)據(jù)單元是16位的字符,以Reader、Writer為基類。


6.輸入流的方法:

int read(): //讀取單個字節(jié)或字符,返回讀取的字節(jié)(字符)數(shù)據(jù),該數(shù)據(jù)可直接轉為int型。read()方法讀取GBK方式保存文件時,由于中文是兩個字節(jié)組成的, 而read()每次只讀了一個字節(jié),所以會出現(xiàn)亂碼問題。int read(byte[] b): //讀取b.length個字節(jié),存在字節(jié)數(shù)組b中。返回的是讀取的字節(jié)個數(shù),讀到末尾返回-1。int read(char[] c): //與上面用法一樣,區(qū)別只是上面的方法讀的是字節(jié),而它讀的字符。

7 輸出流的方法:

void write(int c)://將字節(jié)/字符c輸出到輸出流中。void write(byte[]/char[] buff)://將字節(jié)/字符緩沖數(shù)組中的數(shù)據(jù)輸出到輸出流中。由于Writer類以字符為操作單位,所以它還有自己的方法:void write(String str)://將字符串直接輸出到輸出流中。void write(String str,int off ,int length)://將字符串str從off開始輸出length個字符到輸出流中。

8.與JDBC編程一樣,程序打開的文件IO資源不屬于內存里的資源,垃圾回收機制無法回收該資源,所以應該顯示關閉。

Java7改寫了所有IO資源,都實現(xiàn)了AutoCloseable接口,因此都可自動關閉資源的try語句來關閉IO流。如:

try(FileReader reader = new FileReader("test.java"););//即在try()里的IO流都會自動關閉。

9.轉換流:將字節(jié)流轉為字符流。InputStreamReader、OutputStreamReader,如:

InputStreamReader reader = new InputStreamReader(System.in);//標準輸入(System.in)即鍵盤輸入是InputStream的實例,所以是字節(jié)流。

只有將字節(jié)流轉為字符流的轉換流,因為操作字符流更方便。


10.推回輸入流:PushbackReader、PushbackInputStream

void unread(int c)://將字節(jié)/字符c推回到緩沖區(qū)里,從而允許緩沖區(qū)重復讀c。 void unread(byte[] /char[] buff): //將buff數(shù)組推回到緩沖區(qū)里,從而允許緩沖區(qū)重復讀取該數(shù)組。 void unread(byte[] /char[] ,int off,int len)://將字節(jié)/字符數(shù)組的數(shù)據(jù)從off開始推回len個到緩沖區(qū)里,從而可從緩沖區(qū)重復讀。 推回輸入流的三個read方法,與對應的InputStream 和 Reader的一樣。

例:

PushbackReader back = new PushbackReader(new FileReader("test.java"),99);//創(chuàng)建緩沖區(qū)長度為99的 PushbackReader對象 char[] buff = new char[32];//創(chuàng)建存儲讀取數(shù)據(jù)的容器 String content = new String(buff,0,back.read(buff));//讀一次數(shù)據(jù)存在buff里,并轉為 String back.unread(content.toCharArray());//將剛剛讀的內容轉為char數(shù)組后推回back緩沖區(qū)輸入流中 String content2 = new String(buff,0,back.read(buff));//再次從back的緩沖區(qū)里讀取

11.重定向標準輸入輸出:

System.out和System.in在默認情況下分別代表輸出到顯示器上(控制臺)和鍵盤輸入。
System類提供了以下三個重定向的靜態(tài)方法 :

static void setErr(PrintStream ps):// 重定錯誤輸出流。 static void setOut(PrintStream ps): //System.out.println("內容");將把內容改輸出到ps流里了。 static void setIn(InputStream in):// System.in將從in里獲取內容了,而不是鍵盤輸入。

12.java.io包下還有以下可能會用到的字節(jié)點:

AudioInputStream、CiperInputSteam、DeflaterInputStream、ZipInputStream等具有訪問音頻文件、加密、壓縮、解壓功能的字節(jié)流。

總結

以上是生活随笔為你收集整理的IO流概览的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。