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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java 马士兵 io 代码分析_学习笔记-马士兵java- (IO初步)流

發布時間:2024/8/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 马士兵 io 代码分析_学习笔记-马士兵java- (IO初步)流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Java 流式輸入/輸出原理:

a. 在JAVA程序中,對于數據的輸入/輸出操作以“流”(stream)方式進行;J2SDK 提供了各種各樣的“流”類,用以獲取不同類的數據;程序中通過標準的方法輸入或輸出數據。

2. JAVA 流類的分類:

a.??java.io 包中定義了多個流類型(類或抽象類)來實現輸入/輸出功能。可從不同角度對其進行分類:

① 按數據流的方向不同:輸入流、輸出流。

② 按處理數據單位不同:字節流、字符流。

③ 按功能不同:節點流、處理流。

b. J2SDK 所提供的所有流類型位于包 java.io 內都分別繼承自一下四種抽象流類型。

字節流         字符流

輸入流    InputStream      ?? Reader

輸出流    OutputStream      Writer

c. 節點流和處理流:

① 節點流:可以從一個特定的數據源(節點)讀寫數據(如:文件、內存)。(直接與數據源相連)

② 處理流:“連接”在已存在的流(節點流或處理流)之上,通過對數據的處理為程序提供更為強大的讀寫功能。

3. 輸入/輸出流類:

補充說明:管道為線程與線程之間的通信。

a. InputStream:繼承自 InputStream 的流是用于向程序中輸入數據,且數據的單位為字節(8bit):

⑴ FileInputStream(節點流)  // 從文件讀數據

⑵ PipedInputStream(節點流)  // 從管道讀數據(管道:線程和線程的通信)

⑶ FilterInputStream(處理流)  //

① LineNumberInputStream(處理流)  //

② DataInputStream(處理流)  //

③ BufferedInputStream(處理流)  //

④ PushbackInputStream(處理流)  //

⑷ ByteArrayInputStream(節點流)  // 從字節數據讀數據

⑸ SequenceInputStream(處理流)  //

⑹ StringBufferInputStream(節點流)  // 從字符串讀數據

⑺ ObjectInputStream(處理流)  // 對象的序列化

b. InputStream 的基本方法:

⑴ int read() throws IOException  // 讀取一個字節并以證書的形式返回(0~255),如果返回 -1 已到輸入流的末尾。

⑵ int read(byte[] buffer) throws IOException  // 讀取一系列字節并存儲到一個數組 buffer,返回實際讀取的字節數,如果讀取前已經到輸入流的末尾返回 -1。

⑶? int read(byte[] buffer, int offset, int length) throws IOException  // 讀取 length 個字節,并存儲到一個字節數組 buffer,從 length 位置開始,返回實際讀取的字節數,如果讀取前以到輸入流的末尾返回 -1。

⑷ void close() throws IOException  // 關閉流,釋放內存資源。

⑸ long skip(long n) throws IOException  // 跳過 n 個字節不讀,返回實際跳過的字節數。

c. OutputStream: 繼承自 OutputStream 的流是用于程序中輸入數據,且數據的單位為字節(8bit):

⑴ FileOutputStream(節點流)

⑵ PipedOutputStream(節點流)

⑶ FilterOutputStream(處理流)

① DataOutputStream(處理流)

② BufferedOutputStream(處理流)

③ PrintStream(處理流)

⑷ ByteArrayOutputStream(節點流)

⑸ ObjectOutputStream(處理流)

d. OutputStream 的基本方法:

⑴ void write(int b) throws IOException  // 向輸出流中寫入一個字節數據,該字節數據為參數 b 的低 8 位。

⑵ void write(byte[] b) throws IOException  // 將一個字節類型的數組中的數據寫入輸出流。

⑶ void write(byte[] b, int off, int len) throws IOException  // 將一個字節類型的數組中的從指定位置(off)開始的 len 個字節寫入到輸出流。

⑷ void close() throws IOException  // 關閉流,釋放內存資源。

⑸ void flush() throws IOException  // 將輸出流中的緩沖的數據全部寫出到目的地。

e. Reader:繼承自 Reader 的流都是用于向程序中輸入數據,且數據的單位為字符(16bit):

⑴ BufferedReader(處理流)

① LineNumberReader(處理流)

⑵ CharArrayReader(節點流)

⑶ InputStreamReader(處理流)

① FileReader(節點流)

⑷ FilterReader(處理流)

① PushbackReader(處理流)

⑸ PipedReader(節點流)

⑹??StringReader(節點流)

f. Reader 的基本方法:

⑴ int read() throws IOException  // 讀取一個字符,并以證書的形式返回(0~255),如果返回 -1 已到輸入流的末尾。

⑵ int read(char[] cbuf) throws IOException  // 讀取一系列字符并存儲到一個數組 buffer,返回實際讀取的字符數,如果讀取前已經到輸入流的末尾返回 -1.

⑶ int read(char[] cbuf, int offset, int length) throws IOException  // 讀取 length 個字符,并存儲到一個數組 buffer,從 length 位置開始,返回實際讀取的字符數,如果讀取前已到輸入流的末尾,返回 -1。

⑷ void close() throws IOException  // 關閉流,釋放內存資源。

⑸ long skip(long n) throws IOException  // 跳過 n 個字符不讀,返回實際跳過的字節數。

g. Write:繼承自 Writer?的流都是用于程序中輸出數據,且數據的單位為字符(16 bit):

⑴ BufferedWriter(處理流)

⑵ CharArrayWriter(節點流)

⑶ OutputStreamReader(處理流)

① FileWriter(節點流)

⑷ FilterWriter(處理流)

⑸ PipedWriter(節點流)

⑹ StringWriter(節點流)

⑺ FilterWriter(處理流)

h. Write 的基本方法:

⑴ void write(int c) throws IOException  // 向輸出流中寫入一個字符數據,該字節數為參數 b 的低16位。

⑵ void write(char[] cbuf) throws? IOException  // 講一個字符類型的數據中的數據吸入輸出流。

⑶ void write(char[] cbuf, int offset, int length) throws IOException  // 將一個字符類型的數組中的從指定位置(offset)開始的 length 個字符寫入到輸出流。

⑷ void write(String string) throws IOException  // 將一個字符串中的字符寫入到輸出流

⑸ void write(String string, int offset, int length) throws IOException  // 將一個字符串從 offset 開始的 length 個字符寫入到輸出流。

⑹ void close() throws IOException  // 關閉流,釋放內存資源。

⑺ void flush() throws IOException  // 將輸出流中緩沖的數據全部寫出到目的地。

4. 常見的節點流和處理流:

a. 節點流類型:

b. 訪問文件:

① FileInputStream 和 FileOutputStream 分別繼承自 InputStream 和 OutputStream 用于向文件中的輸入和輸出字節。

② FileInputStream 和 FileOutputStream 的常用構造方法:

⑴ FileInputStream(String name) throws FileNotFoundException

⑵ FileInputStream(File file) throws FileNotFoundException

⑶ FileOutputStream(String name) throws FileNotFoundException

⑷ FileOutputStream(File file) throws FileNotFoundException

⑸ FileOutputStream(File file, boolean append) throws FileNotFoundException

③ FileInputStream 和 FileOutputStream 類支持其父類 InputStream 和 OutputStream 所提供的數據讀寫方法。

④ 注意:

Ⅰ 在實例化 FileInputStream 和 FileOutputStream 流時要用 try - catch 語句以處理其可能拋出的 FileNotFoundException。

Ⅱ 在讀寫數據時也要用 try - catch 語句以處理可能拋出的 IOException。

Ⅲ FileNotFoundException 是 IOException 的子類。

c. 處理流類型:

5. 文件流:

a.

6. 緩沖流(處理流):

a. 緩沖流要“套接”在相應的節點流之上,對讀寫數據提供了緩沖的能力,提高了讀寫的效率,同時增加了一些新的方法。

b. J2SDK 提供了四棟緩存流,其常用的構造方法:

⑴ BufferedReader(Reader in)

⑵ BufferedReader(reader in, int sz)  // sz 為自定義緩存區的大小

⑶ BufferedWriter(Writer out)

⑷ BufferedWriter(Writer out, int sz)

⑸ BufferedInputStream(InputStream in)

⑹ BufferedInputStream(InputStream in, int size)

⑺ BufferedOutputStream(OutputStream out)

⑻ BufferedOutputStream(OutputStream out, int size)

c. 緩沖輸入流支持其父類的 mark 和 reset 方法。

d. BufferedReader 提供了 readLine 方法用于讀取一行字符串(以 \r 或?\n 分隔)。

e. BufferedWriter 提供了 newLine 用于寫入一個"行分隔符"。

f. 對于輸出的緩沖流,寫出的數據會先在內存中緩存,使用 flush 方法將會使內存中的數據立刻寫出。

7. 數據流(先寫進去的先讀出來):

a. DataInputStream 和 DataOutputStream 分別繼承自 InputStream 和 OutPutStream,它屬于處理流,需要分別“套接”在 InputStream 和 OutputStream 類型的節點流上。

b. DataInputStream 和 DataOutputStream 提供了可以存取與機器無關的Java原始類型數據(如:int, double 等)的方法。

c. DataInputStream 和 DataOutputStream 的構造方法為:

① DataInputStream(InputStream in)

② DataOutputStream(OutputStream out)

8. 轉換流(字節流與字符流的轉換):

a. InputStreamReader 和 OutputStreamWriter 用與字節數據到字符數據之間的轉換。

b. InputStreamReader 需要和 InputStream “套接"。

c. OutputStreamWriter 需要和 OutputStream “套接"。

d. 轉換流在構造時可以指定其編碼集合,例如:

InputStream isr = new InputStreamReader(System in, "ISO8859_1")

9. Print 流:

a. PrintWriter 和 PrintStream 都屬于輸出流,分別針對與字符和字節。

b. PrintWriter 和 PrintStream 提供了重載的 print。

c. Println 方法用于多種數據類型的輸出。

d. PrintWriter 和 PrintStream 的輸出操作不會拋出異常,用戶通過檢測錯誤狀態獲取錯誤信息。

e.? PrintWriter 和 PrintStream 有自動 flush 功能。

f. PrintWriter常用構造方法:

⑴ PrintWriter(Writer out)

⑵ PrintWriter(Writer out,boolean autoFlush)

⑶ PrintWriter(OutputStream out)

⑷ PrintWriter(Outputstream out,boolean autoFlush)

⑸ PrintStream(OutputStream out)

⑹ PrintStream(OutputStream out, booleanautoFlush)

10. Object流(序列化):

a. 直接將Object 寫入或獨處

① transient 關鍵字(透明的,修飾成員變量,transient 修飾的成員變量在序列化的時候不予考慮)

② serializable 接口(可序列化,標記性接口,不用實現任何方法)

③ externalizable 接口(外部化,serializable的子接口,自己實現對象序列化):

⑴ readExternal(ObjectInput in)  //? 讀對象 in

⑵ writeExternal(ObjectOutput out)  // 寫對象 out

總結

以上是生活随笔為你收集整理的java 马士兵 io 代码分析_学习笔记-马士兵java- (IO初步)流的全部內容,希望文章能夠幫你解決所遇到的問題。

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