程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java的標准數據流

Java的標准數據流

編輯:關於JAVA

Java輸入輸出(I/O)API是Java裡最重要的API之一。Java I/O提供了許多API提供對文件,內存,socket的讀寫。本文對Java I/O包括NIO等做一個總結。

Java裡的流(Stream)概念:

流是一種有序的字節數據對象。流又分為輸入流(InputStream)和輸出流(OutputStream)。輸入流從外部資源(文件,內存,socket等)讀入字節數據到Java對象;輸出流則把Java對象(字節數據等)寫入到外部資源。

所有Java I/O都可歸類為以下兩種:

1,字節數據輸入輸出I/O

2,文字列數據輸入輸出I/O

所有的字節數據輸入輸出I/O都繼承自java.io.InputStream和Java.io.OutputStream接口。

字節數據輸入流及其派生類:

  1. Java.io.InputStream
  2. +--Java.io.ByteArrayInputStream
  3. +--Java.io.BufferedInputStream
  4. +--Java.io.DataInputStream
  5. +--Java.io.FileInputStream
  6. +--Java.io.FilterInputStream
  7. +--Java.io.ObjectInputStream
  8. +--Java.io.PipedInputStream
  9. +--Java.io.PushbackInputStream
  10. +--Java.io.SequenceInputStream
  11. +--Java.io.StringBufferInputStream

字節數據輸出流及其派生類:

  1. Java.io.OutputStream
  2. +--Java.io.BufferedOutputStream
  3. +--Java.io.ByteArrayOutputStream
  4. +--Java.io.DataOutputStream
  5. +--Java.io.FileOutputStream
  6. +--Java.io.FilterOutputStream
  7. +--Java.io.ObjectOutputStream
  8. +--Java.io.PipedOutputStream

所有的文字列數據輸入輸出I/O都繼承自java.io.Reader和Java.io.Writer接口。

文字列數據輸入流及其派生類:

  1. Java.io.Reader
  2. +--Java.io.BufferedReader
  3. +--Java.io.CharArrayReader
  4. +--Java.io.FileReader
  5. +--Java.io.FilterReader
  6. +--Java.io.InputStreamReader
  7. +--Java.io.LineNumberReader
  8. +--Java.io.PipedReader
  9. +--Java.io.PushbackReader
  10. +--Java.io.StringReader

文字列數據輸出流及其派生類:

  1. Java.io.Writer
  2. +--Java.io.BufferedWriter
  3. +--Java.io.CharArrayWriter
  4. +--Java.io.FilterWriter
  5. +--Java.io.OutputStreamWriter
  6. +--Java.io.FileWriter
  7. +--Java.io.PipedWriter
  8. +--Java.io.PrintWriter
  9. +--Java.io.StringWriter

它們(Java.io)之間的關系可以用下圖來表示:

JDK 1.4以前的版本的Java I/O操作集中在Java.io這個包中,是基於流的阻塞(blocking)API。

從JDK1.4開始引入了New I/O(NIO)API。該API包含在Java.nio.*裡。NIO有時也叫做nonblocking I/O(非阻塞I/O),NIO基於緩沖區,並能提供非阻塞(non-blocking)IO操作。

NIO主要包:

Java.nio

定義了Buffer及其數據類型相關的子類。

Java.nio.channels

定義了高速文件處理/socket通信處理等I/O處理的Channel接口以及這些接口在文件系統和網絡通信等上的實現類。同時可以通過Selector類,提供了進行非阻塞I/O操作的方法。該包是NIO API的核心包。

Java.nio.charset

定義了字符編碼和解碼處理類。

NIO接口/類的層次結構:

  1. Java.nio.ByteBuffer
  2. Java.nio.channels.Channel
  3. +--Java.nio.channels.ServerSocketChannel
  4. +--Java.nio.channels.ReadableByteChannel
  5. +--Java.nio.channels.ScatteringByteChannel
  6. +--Java.nio.channels.ByteChannel
  7. +--Java.nio.channels.WritableByteChannel
  8. +--Java.nio.channels.ByteChannel
  9. +--Java.nio.channels.GatheringByteChannel
  10. Java.nio.channels.Slector
  11. Java.nio.channels.ScatteringByteChannel, ByteChannel, GatheringByteChannel
  12. +--Java.nio.channels.FileChannel
  13. +--Java.nio.channels.SocketChannel
  14. +--Java.nio.channels.DatagramChannel
  15. Java.nio.charset.Charset
  16. java.nio.charset.CharsetEncoderJava.nio.charset.CharsetDecoder

NIO層次結構圖:

第一節 數據流的基本概念

◆ 理解數據流

流一般分為輸入流(Input Stream)和輸出流(Output Stream)兩類,但這種劃分並不是絕對的。比如一個文件,當向其中寫數據時,它就是一個輸出流;當從其中讀取數據時,它就是一個輸入流。當然,鍵盤只是一個數人流,而屏幕則只是一個輸出流。

◆ 的標准數據流

標准輸入輸出指在字符方式下(如DOS),程序與系統進行交互的方式,分為三種:

標准輸入studin,對象是鍵盤。

標准輸出stdout,對象是屏幕。

標准錯誤輸出stderr,對象也是屏幕。

例 8.1 從鍵盤輸入字符。

本例用System.in.read(buffer)從鍵盤輸入一行字符,存儲在緩沖區buffer中,count保存實際讀入的字節個數,再以整數和字符兩種方式輸出buffer中的值。Read方法在Java.io包中,而且要拋出IOException異常。程序如下:

  1. import Java.io.*;
  2. public class Input1
  3. {
  4. public static void main(String args[]) throws IOException
  5. {
  6. System.out.println("Input: ");
  7. byte buffer[] = new byte[512]; //輸入緩沖區
  8. int count = System.in.read(buffer); //讀取標准輸入流
  9. System.out.println("Output: ");
  10. for (int i=0;i<COUNT;I++) 輸出buffer元素值
  11. {
  12. System.out.print(" "+buffer[i]);
  13. }
  14. System.out.println();
  15. for (int i=0;i<COUNT;I++) 按字符方式輸出buffer
  16. {
  17. System.out.print((char) buffer[i]);
  18. }
  19. System.out.println("count = "+ count); //buffer實際長度
  20. }
  21. }

程序中,main方法采用throws子句拋出IOException異常交由系統處理。

Java.io包中的數據流及文件類

字節流:

從InputStream和OutputStream派生出來的一系列類。這類流以字節(byte)為基本處理單位。

  • InputStream、OutputStream
  • FileInputStream、FileOutputStream
  • PipedInputStream、PipedOutputStream
  • ByteArrayInputStream、ByteArrayOutputStream
  • FilterInputStream、FilterOutputStream
  • DataInputStream、DataOutputStream
  • BufferedInputStream、BufferedOutputStream

字符流:

從Reader和Writer派生出的一系列類,這類流以16位的Unicode碼表示的字符為基本處理單位

  • Reader、Writer
  • InputStreamReader、OutputStreamWriter
  • FileReader、FileWriter
  • CharArrayReader、CharArrayWriter
  • PipedReader、PipedWriter
  • FilterReader、FilterWriter
  • BufferedReader、BufferedWriter
  • StringReader、StringWriter
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved