導航:首頁 > 編程語言 > javaio包中

javaio包中

發布時間:2022-06-20 11:34:35

java IO輸入輸出流中的各種位元組流,字元流類,我需要都記住嗎,還是只要記住幾個常用的呢

記住幾個常用的就行了, 一般也就是用幾個常用的。
位元組流
位元組流主要是操作byte類型數據,也byte數組為准,主要操作類就是
·位元組輸出流:OutputStream
·位元組輸入流:InputStream

字元流
在程序中一個字元等於2個位元組,那麼java提供了Reader、Writer兩個專門操作字元流的類。
·字元輸出流:Writer
·字元輸入流:Reader

位元組-字元轉換流
OutputStreamWriter和InputStreamReader
在整個IO包中,實際上就是位元組流和字元流,但是除了這兩個流之外,還存在一組位元組流-字元流的轉換類。
[java] view plainprint?
•OutputStreamWriter:是Writer的子類,將輸出的字元流轉換為位元組流。即:將一個位元組流的輸出對象變為位元組流的輸出對象
•InputStreamReader:是Reader的子類,將輸入的位元組流變為字元流,即:將一個位元組流的輸入對象變為字元流的輸入對象。

㈡ 在java.io包中,inputstream表示什麼流它能否實例化,其作用是什麼

InputStream表示位元組輸入流,它是一個抽象類,不能實例化。

InputStream的作用是標志那些從不同數據起源產生輸入的類。這些數據起源包括(每個都有一個相關的InputStream子類):
(1) 位元組數組
(2) String對象
(3) 文件
(4) 「管道」,它的工作原理與現實生活中的管道類似:將一些東西一端置入,它們在另一端輸出。
(5) 一個由其他種類的流組成的序列,以便我們將其統一收集合並到一個流內。
(6) 其他數據集,如Internet連接等。

㈢ 在java的IO包中可以實現對輸入輸出流的重定向,定向之後怎麼關閉啊求解……

定向過程中,確保信息流發送完畢或接收完畢,就可以把流關閉了;

㈣ java.io的Java流輸入輸出原理

Java把這些不同來源和目標的數據都統一抽象為數據流。Java語言的輸入輸出功能是十分強大而靈活的,美中不足的是看上去輸入輸出的代碼並不是很簡潔,因為你往往需要包裝許多不同的對象。
在Java類庫中,IO部分的內容是很龐大的,因為它涉及的領域很廣泛:標准輸入輸出,文件的操作,網路上的數據流,字元串流,對象流,zip文件流。 按流向分:
輸入流: 程序可以從中讀取數據的流。
輸出流: 程序能向其中寫入數據的流。
按數據傳輸單位分:
位元組流: 以位元組為單位傳輸數據的流
字元流: 以字元為單位傳輸數據的流
按功能分:
節點流: 用於直接操作目標設備的流
過濾流: 是對一個已存在的流的鏈接和封裝,通過對數據進行處理為程序提供功能強大、靈活的讀寫功能。 JDK所提供的所有流類位於java.io包中,都分別繼承自以下四種抽象流類。
InputStream:繼承自InputStream的流都是用於向程序中輸入數據的,且數據單位都是位元組(8位)。
OutputStream:繼承自OutputStream的流都是程序用於向外輸出數據的,且數據單位都是位元組(8位)。
Reader:繼承自Reader的流都是用於向程序中輸入數據的,且數據單位都是字元(16位)。
Writer:繼承自Writer的流都是程序用於向外輸出數據的,且數據單位都是字元(16位)。 BufferedInputStream BufferedInputStream 為另一個輸入流添加一些功能,即緩沖輸入以及支持 mark 和 reset 方法的能力。 BufferedOutputStream 該類實現緩沖的輸出流。 BufferedReader 從字元輸入流中讀取文本,緩沖各個字元,從而實現字元、數組和行的高效讀取。 BufferedWriter 將文本寫入字元輸出流,緩沖各個字元,從而提供單個字元、數組和字元串的高效寫入。 ByteArrayInputStream ByteArrayInputStream 包含一個內部緩沖區,該緩沖區包含從流中讀取的位元組。 ByteArrayOutputStream 此類實現了一個輸出流,其中的數據被寫入一個 byte 數組。 CharArrayReader 此類實現一個可用作字元輸入流的字元緩沖區。 CharArrayWriter 此類實現一個可用作 Writer 的字元緩沖區。 Console 此類包含多個方法,可訪問與當前 Java 虛擬機關聯的基於字元的控制台設備(如果有)。 DataInputStream 數據輸入流允許應用程序以與機器無關方式從底層輸入流中讀取基本 Java 數據類型。 DataOutputStream 數據輸出流允許應用程序以適當方式將基本 Java 數據類型寫入輸出流中。 File 文件和目錄路徑名的抽象表示形式。 FileDescriptor 文件描述符類的實例用作與基礎機器有關的某種結構的不透明句柄,該結構表示開放文件、開放套接字或者位元組的另一個源或接收者。 FileInputStream FileInputStream 從文件系統中的某個文件中獲得輸入位元組。 FileOutputStream 文件輸出流是用於將數據寫入 File 或 FileDescriptor 的輸出流。 FilePermission 此類表示對文件和目錄的訪問。 FileReader 用來讀取字元文件的便捷類。 FileWriter 用來寫入字元文件的便捷類。 FilterInputStream FilterInputStream 包含其他一些輸入流,它將這些流用作其基本數據源,它可以直接傳輸數據或提供一些額外的功能。 FilterOutputStream 此類是過濾輸出流的所有類的超類。 FilterReader 用於讀取已過濾的字元流的抽象類。 FilterWriter 用於寫入已過濾的字元流的抽象類。 InputStream 此抽象類是表示位元組輸入流的所有類的超類。 InputStreamReader InputStreamReader 是位元組流通向字元流的橋梁:它使用指定的 charset 讀取位元組並將其解碼為字元。 LineNumberInputStream 已過時。此類錯誤假定位元組能充分表示字元。

㈤ java io包中的類體現了什麼設計思想

說設計思想,當然是面向對象思想啦。
說設計模式的話,用到了裝飾模式和適配器模式,下面簡要說明,
1、裝飾者模式:在由 InputStream,OutputStream,Reader和Writer代表的等級結構內部,有一些流處理器可以對另一些流處理器起到裝飾作用,形成新的,具有改善了的功能的流處理器。裝飾者模式是Java I/O庫的整體設計模式。這樣的一個原則是符合裝飾者模式的。
2、適配器模式:在由InputStream,OutputStream,Reader和Writer代表的等級結構內部,有一些流處理器是對其它類型的流源的適配。這就是適配器模式的應用。

㈥ 關於java.io包中,FileInputStream 的read()方法

API說明:
public int read() throws IOException
從此輸入流中讀取一個數據位元組。如果沒有輸入可用,則此方法將阻塞。
指定者:類 InputStream 中的 read
返回:下一個數據位元組;如果已到達文件末尾,則返回 -1。

拋出:IOException - 如果發生 I/O 錯誤。
個人理解:
該方法將輸入按位元組讀入,當讀取到位元組時就返回該位元組的int型數值(可以將其強制轉換成byte類型),如果讀取到文件末尾也就是無數據可讀時則返回-1,表示以讀到文件末尾。順便說一句按此方法讀取時需要將讀到的int轉成byte同時存入到一個足夠大的byte數組中,然後根據該數組構造字元串,顯示結果!
例:
public static void main(String[] args) throws IOException {
File f = new File("E:/java文件/demo1.txt");
InputStream ins = new FileInputStream(f);
byte[] bb = new byte[1024];
int temp = 0;
int i = 0;
while ((temp = ins.read()) != -1) {
bb[i++] = (byte) temp;
System.out.println((byte) temp);
}
System.out.println(new String(bb, "UTF-8").trim());
}

關於Byte的toString()方法:
返回表示此 Byte 的值的 String 對象。該值被轉換成有符號的十進製表示形式,並作為一個 string 返回,正如將 byte 值作為一個參數指定給 toString(byte) 方法所返回的一樣。
覆蓋:類 Object 中的 toString
返回:以基數 10 表示的此對象值的字元串表示形式。

㈦ java.io包中

IO中輸入位元組流的繼承圖。
InputStream
ByteArrayInputStream
FileInputStream
FilterInputStream
DataInputStream
LineNumberInputStream
PushbackInputStream
ObjectInputStream
PipedInputStream
SequenceInputStream
StringBufferInputStream

㈧ Java中的I/O流的基本知識

1、與外部設備和其它計算機進行交流的輸入輸出操作,尤其是對磁碟的文件操作,是計算機程序重要的功能,任何計算機語言都必須對輸入輸出提供支持。Java也不例外,它的輸入輸出類庫中包含了豐富的系統工具,這些類被放在java.io包中。在該類庫中,除了定義文件輸入輸出操作外,還定義了許多用來和其他外設進行信息交換的類。

2、流(Stream)指的是在計算機的輸入與輸出之間運動的數據序列:輸入流代表從外設流入計算機的數據序列;輸出流代表從計算機流向外設的數據序列。
流式輸入輸出是一種很常見的輸入輸出方式,它最大的特點是數據的獲取和發送均沿數據序列順序進行:每一個數據都必須等待排在它前面的數據讀入或輸出之後才能被讀寫,每次讀寫操作處理的都是序列中剩餘的未讀寫數據中的第一個,而不能夠隨意選擇輸入輸出的位置。磁帶機是實現流式輸入輸出的典型設備

3、InputStream和OutputStream是java.io包中的兩個抽象類,他們分別是其他所有輸入、輸出流類的父類。其他所有輸入流類都是繼承了InputStream的基本輸入功能並根據自身屬性對這些功能加以擴充;同樣,其他所有輸出流類也都是繼承了OutputStream類的基本輸出功能並加以擴展的

4、File類是IO包中惟一代表磁碟文件本身的對象,File對象定義了一些與平台無關的方法來操縱文件
創建File類對象時需指明它所對應的文件或目錄名。File類共提供了4個不同的構造方法,以不同的參數形式靈活地接收文件和目錄名信息

5、FileReader和FileWrite類分別繼承自Reader類和Writer類,繼承關系如圖6-2所示。FileReader類用於讀取文件;FileWrite類用於將數據寫入文件。在使用這兩個類之前,必須調用其構造方法創建相應的對象,然後才能調用相應的read()或write()方法進行文件的讀寫操作

6、BufferedReader和BufferedWrite類分別繼承自Reader類和Writer類,BufferedReader類用來從字元輸入流中讀取文本,緩沖各個字元,從而實現字元、數組和行的高效讀取。BufferedWrite類用於將文本寫入字元輸出流,緩沖各個字元,從而提供單個字元、數組和字元串的高效寫入。

7、LineNumberReader類是BufferedReader類的直接子類。該類允許對文本輸入數據流加入行號。
此類定義了方法setLineNumber(int)和getLineNumber(),它們可分別用於設置和獲取當前行號。默認情況下,行編號從0開始。該行號隨數據讀取在每個行結束符處遞增,並且可以通過調用setLineNumber(int)更改行號。但要注意的是,setLineNumber(int)不會實際更改流中的當前位置;它只更改將由getLineNumber()返回的值

8、LineNumberReader類是BufferedReader類的直接子類。該類允許對文本輸入數據流加入行號。
此類定義了方法setLineNumber(int)和getLineNumber(),它們可分別用於設置和獲取當前行號。默認情況下,行編號從0開始。該行號隨數據讀取在每個行結束符處遞增,並且可以通過調用setLineNumber(int)更改行號。但要注意的是,setLineNumber(int)不會實際更改流中的當前位置;它只更改將由getLineNumber()返回的值使用RandomAccessFile類隨機讀寫文件時,在創建了一個RandomAccessFile對象之後,該文件即對文件描述句柄處於打開狀態。此時,文件的指針處於文件開始位置。可以通過seek(long pos)方法設置文件指針的當前位置,以進行文件的快速定位,然後使用相應的read()和write()方法對文件進行讀寫操作。在對文件的讀寫操作完成後,調用close()方法關閉文件

9、FileInputStream和FileOutputStream類主要用來處理以「位為主」的輸入輸出操作。其中,FileInputStream類繼承於InputStream類;FileOutputStream類繼承於OutputStream類。
與RandomAccessFile類所不同的是,FileInputStream和FileOutputStream類中提供的文件處理方式是文件中數據流的順序讀寫,而不是利用文件指針進行定位的隨機讀寫

10、Java中的PipedInputStream和PipedOutputStream類提供了利用管道方式進行數據輸入輸出管理。管道流用來將一個程序或者線程的輸出連接到另外一個程序或線程作為輸入,使得相連線程能夠通過PipedInputStream和PipedOutputStream類進行數據交換。
PipedInputStream和PipedOutputStream類也是InputStream和OutputStream類的直接子類。這兩個類必須結合使用,其中,管道輸入流作為管道的接收端、管道輸出流作為管道的發送端,在程序設計中應注意數據的傳輸方向
順序輸入流SequenceInputStream是InputStream的直接子類,其功能是將多個輸入流連接在一起,形成單一的輸入數據流,沒有對應的輸出數據流存在。
順序輸入流SequenceInputStream由多個輸入流構造而成,它從輸入流的有序集合開始,並從第一個輸入流開始讀取,直到文件末尾,接著從第二個輸入流讀取,依次類推,直到到達順序輸入流包含的最後一個輸入流的文件末尾為止

㈨ Java中IO與NIO的區別和使用場景

在java2以前,傳統的socket IO中,需要為每個連接創建一個線程,當並發的連接數量非常巨大時,線程所佔用的棧內存和CPU線程切換的開銷將非常巨大。java5以後使用NIO,不再需要為每個線程創建單獨的線程,可以用一個含有限數量線程的線程池,甚至一個線程來為任意數量的連接服務。由於線程數量小於連接數量,所以每個線程進行IO操作時就不能阻塞,如果阻塞的話,有些連接就得不到處理,NIO提供了這種非阻塞的能力。

NIO 設計背後的基石:反應器模式,用於事件多路分離和分派的體系結構模式。

反應器(Reactor):用於事件多路分離和分派的體系結構模式

通常的,對一個文件描述符指定的文件或設備, 有兩種工作方式: 阻塞 與非阻塞 。所謂阻塞方式的意思是指, 當試圖對該文件描述符進行讀寫時, 如果當時沒有東西可讀,或者暫時不可寫, 程序就進入等待 狀態, 直到有東西可讀或者可寫為止。而對於非阻塞狀態, 如果沒有東西可讀, 或者不可寫, 讀寫函數馬上返回, 而不會等待 。

一種常用做法是:每建立一個Socket連接時,同時創建一個新線程對該Socket進行單獨通信(採用阻塞的方式通信)。這種方式具有很高的響應速度,並且控制起來也很簡單,在連接數較少的時候非常有效,但是如果對每一個連接都產生一個線程的無疑是對系統資源的一種浪費,如果連接數較多將會出現資源不足的情況。

另一種較高效的做法是:伺服器端保存一個Socket連接列表,然後對這個列表進行輪詢,如果發現某個Socket埠上有數據可讀時(讀就緒),則調用該socket連接的相應讀操作;如果發現某個 Socket埠上有數據可寫時(寫就緒),則調用該socket連接的相應寫操作;如果某個埠的Socket連接已經中斷,則調用相應的析構方法關閉該埠。這樣能充分利用伺服器資源,效率得到了很大提高。

傳統的阻塞式IO,每個連接必須要開一個線程來處理,並且沒處理完線程不能退出。

非阻塞式IO,由於基於反應器模式,用於事件多路分離和分派的體系結構模式,所以可以利用線程池來處理。事件來了就處理,處理完了就把線程歸還。而傳統阻塞方式不能使用線程池來處理,假設當前有10000個連接,非阻塞方式可能用1000個線程的線程池就搞定了,而傳統阻塞方式就需要開10000個來處理。如果連接數較多將會出現資源不足的情況。非阻塞的核心優勢就在這里。

為什麼會這樣,下面就對他們做進一步細致具體的分析:

首先,我們來分析傳統阻塞式IO的瓶頸在哪裡。在連接數不多的情況下,傳統IO編寫容易方便使用。但是隨著連接數的增多,問題傳統IO就不行了。因為前面說過,傳統IO處理每個連接都要消耗一個線程,而程序的效率當線程數不多時是隨著線程數的增加而增加,但是到一定的數量之後,是隨著線程數的增加而減少。這里我們得出結論,傳統阻塞式IO的瓶頸在於不能處理過多的連接。

然後,非阻塞式IO的出現的目的就是為了解決這個瓶頸。而非阻塞式IO是怎麼實現的呢?非阻塞IO處理連接的線程數和連接數沒有聯系,也就是說處理 10000個連接非阻塞IO不需要10000個線程,你可以用1000個也可以用2000個線程來處理。因為非阻塞IO處理連接是非同步的。當某個鏈接發送請求到伺服器,伺服器把這個連接請求當作一個請求"事件",並把這個"事件"分配給相應的函數處理。我們可以把這個處理函數放到線程中去執行,執行完就把線程歸還。這樣一個線程就可以非同步的處理多個事件。而阻塞式IO的線程的大部分時間都浪費在等待請求上了。

所謂阻塞式IO流,就是指在從數據流當中讀寫數據的的時候,阻塞當前線程,直到IO流可以

重新使用為止,你也可以使用流的avaliableBytes()函數看看當前流當中有多少位元組可以讀取,這樣

就不會再阻塞了。

㈩ java中的java.io包中的file類

File file=new File("a.jpg");
是在內存中創建一個file實例,只存在內存中,不存在硬碟上,你需要執行file.createNewFile();
才會在硬碟上創建,如果a.jpg
在硬碟上已經存在了,則會覆蓋掉。

閱讀全文

與javaio包中相關的資料

熱點內容
pdf加密一機一碼 瀏覽:600
怎麼把百度雲資源壓縮 瀏覽:456
不會數學英語如何編程 瀏覽:88
如何能知道網站伺服器地址 瀏覽:648
程序員月薪5萬難嗎 瀏覽:138
如何評價程序員 瀏覽:803
雲虛機和伺服器的區別 瀏覽:403
廣西柳州壓縮機廠 瀏覽:639
arm開發編譯器 瀏覽:833
51單片機的核心 瀏覽:746
看電視直播是哪個app 瀏覽:958
將c源程序編譯成目標文件 瀏覽:787
再要你命3000pdf 瀏覽:558
ai軟體解壓軟體怎麼解壓 瀏覽:520
文件夾怎樣設置序列號 瀏覽:963
javascriptgzip壓縮 瀏覽:248
易語言怎麼取出文件夾 瀏覽:819
蘋果xs手機加密app哪裡設置 瀏覽:605
超聲霧化器與壓縮霧化器 瀏覽:643
模擬實現進程調度演算法 瀏覽:388