導航:首頁 > 編程語言 > javaio原理

javaio原理

發布時間:2022-04-30 15:38:04

『壹』 java io 阻塞底層是如何實現的nio底層是如何實現非阻塞的

說實話,在這個問題前我沒聽說過「nio」這個名字。
剛才上網查了一下,我覺得網上有一些資料還是不錯。
在網路上使用「java nio」作為關鍵字搜索。我就搜索到一個文章,稍微讀了一下,有一些小收獲。
文章名字大致為《java nio原理和使用》,不知道是否對你有用。
以上我的回答,僅供參考。

『貳』 java的IO流中可以通過自定義一個數組來存儲數據,為什麼還要使用緩存區呢

IO流自定義位元組流的緩沖區:

思路:BufferedInputStream類中read()方法的工作原理
1)先一個一個從位元組流中讀取位元組,讀取一定量(自定義)之後,存儲在一個位元組數組(緩沖區)(FileInputStream.read(byte[] b)),並獲得存儲數量(read方法的返回值)。
2)一個一個位元組返回,返回一個,存儲數量減1,然後指針往後移一位,准備取下一個。
3)如果存儲數量為0 ,代表當前數組中所有數據已經全部取完,此時再來一次讀取(read(byte[] b)),再獲得此次存儲數量。
4)如果存儲數量(即read方法返回-1),代表讀到文件末尾,返回-1。
因此,需要用到以下幾個變數:
讀取的位元組數量,指向數組中准備取哪一個的指針,將要返回的位元組變數。

『叄』 學java的io的時候這部分不懂

FileReader 是文件讀取流,通俗講讀取文件用的,工作原理不需要懂,知道干什麼的就行了,

setText是寫入文件

『肆』 求高手點撥「Java io流」部分的知識詳細原理辨析。

分析,你應該是tcp 你tcp連接的話,tcp的底層io不就是一個io流管道!實際上就是向一個地方,一個方向寫。不關你是幾個outputStream對象,在同一個tcp連接,對應的都應該寫到一個客戶端,這個是有你只要一個DataInputStream接受不就行了,對於多個tcp連接,每個客戶端都有一個DataiNPUTsTREAM

『伍』 如何學好java的io

首先先搞懂JavaSE的部分,Swing和swt部分就可以少看或不看,因為現在用的比較少。重點是看懂Java中的面向對象、集合框架、JDBC、異常、IO、線程和網路編程。JavaSE搞定後再學習Servlet、JSP,然後才是經典的Struts2、Hibernate和Spring,學習框架時重點理解框架的運行原理,甚至可以嘗試自己寫個輕量級的框架。理解運行原理的最好方法就是閱讀源代碼,還是要感謝Java中的開源項目。這期間還要多找各種大小的項目去完成,不一定要大,但是要精緻,功能要完整,這樣可以練習所學知識,並且可以在做項目中發現自己的知識體系中不足的地方。關於看視頻,我不推薦,很多同學一天到晚就知道看視頻,殊不知,編程真理在於「練習,練習,不停練習」!
再補充下:當學習Java的期間,會碰到各種各樣的異常,請積累這些異常信息,以及如何出現的異常和如何處理的,因為java中常見的異常就那麼幾種,積累的多了,處理問題的能力就提高,這樣水平會提高的很快!
-----------------2015年1月5日修改---------------
這個答案最開始是11年回答的,不少留言的同學問現在這個答案是否還有效,答案是依然有效。因為這幾年的發展,從招聘的角度看,使用 Java 的IT 的公司對技術的要求變化不大,依然要求你有扎實的 JavaSE 功底,會使用常用的框架。
SpringMVC 這幾年的佔有率迅速的提高,可能之後會取代 Struts2,但是無論怎麼變化,這些還都是 MVC 模式,理解了這個模式,上手任何的 MVC框架都應該很快。
企業需要的變化還體現在大數據方面,因為 Hadoop 的流行,Java 的應用場景又多了一個。所以,不喜歡 web 的可以考慮學習大數據方面的知識。
另一個流行的場景自然就是 Android,學習 Android 依然需要你有 JavaSE 的底子+HTTP 協議的理解,再配合上 Linux 的知識就可以開始了。
再說下找項目的問題,初學者可能會碰到不知道做什麼的問題,其實最開始大家都是從模仿開始的,例如你學會了 jsp+Servlet,那就可以模仿一個 v2ex 這樣的論壇出來。學會了 SpringMVC,那就試著將論壇的代碼重構,提供restful介面供客戶端訪問(Android、IOS 、web 等)。論壇做的沒難度了,那就模仿一個團購網站,依然是不一定要做全部的功能,但是做出的功能要穩定,要精緻。或者一個微信公眾平台的開發都是不錯的項目。
初學者看源代碼有的人推薦看 Struts2、spring 的,但是我相信10個初學者9個看不懂,那就從簡單的開始,例如 Apache 的 Commons 庫,例如 lang、dbutils、io 等,這些都是非常不錯的代碼,類的數量不多而且質量也不錯,這些看懂之後,你的基礎水平增長的不是一點點。
再次提醒初學者,學習編程沒有你想的那麼簡單,必須要多練習,多思考,最主要的是你對這個有興趣。現在不少網站和媒體都宣傳1個月學會前端、3個月入職 BAT 的口號,那也就是口號而已,別太認真。這條路沒有捷徑,寫你的代碼就是了!
暫時就這么多,

『陸』 java-io流緩沖區的小疑問

你問的問題很有研究性,要處理的文件很小的時候這樣的確看不出來你說的區別,緩沖區是個可以重用的內存區,這個主要是用於CPU提高讀取文件的效率,而CPU的速度是遠遠高與內存的,假設你沒有這個緩沖區的話,CPU就會要不停的讀取文件,當在讀取較大的文件時,這樣處理效率是不是很低呢?內存速度慢,你這樣一個位元組一個位元組的送的話是不是整體的效率都低了啊?當你有緩沖的時候CPU在等緩沖區寫滿時是不是可以處理其它的信息呢?

『柒』 java的IO類那麼多,應該掌握哪幾個

IO包中絕大部分的類都是由以下四個類直接或間接繼承來的
InputStream OutputStream Reader 還有Writer

其中InputStream和OutputStream代表輸入流和輸出流,也就是位元組流的輸入和輸出,他們定義了如何讀取和寫入位元組和位元組數組,所以說基本上所有XXXInputStream和XXXOutputStream都是針對位元組進行操作的
比如說FileInputStream,它可以以流的形式讀取一個文件,或者StringBufferInputStream,它以流的形式讀取一個字元串,所有的子類都是不同領域的應用罷了

而Reader和Writer是在輸入輸出流之上的更高級的字元級別的輸入輸出,稱為讀取器和寫入器,他們直接讀取和寫入字元(字元串)數據而不是位元組(位元組數組),比如你有一個文本文件就可以使用FileReader這個類來讀取裡面的文本,還有PrintWriter是用來輸出的寫入器,System.out的那個out返回的就是一個PrintWirter的內部實現PrintOutputStream

其實具體類用的比較多的就是File開頭的String開頭的和Object開頭的,Object開頭的是用來序列化讀取的

IO包並不難,別被嚇到了,掌握好他們之間的繼承關系,就可以很容易了解

『捌』 Java中IO緩沖區的原理是什麼

如果是邊讀邊寫,就會很慢,也傷硬碟。緩沖區就是內存里的一塊區域,把數據先存內存里,然後一次性寫入,類似資料庫的批量操作,這樣效率比較高。

調用I\O操作的時候,實際上還是一個一個的讀或者寫,關鍵就在,CPU只有一個,不論是幾個核心。CPU在系統調用時,會不會還要參與主要操作?參與多次就會花更多的時間。

系統調用時,若不用緩沖,CPU會酌情考慮使用 中斷。此時CPU是主動地,每個周期中都要花去一部分去詢問I\O設備是否讀完數據,這段時間CPU不能做任何其他的事情(至少負責執行這段模塊的核不能)。所以,調用一次讀了一個字,通報一次,CPU騰出時間處理一次。

而設置緩沖,CPU通常會使用 DMA 方式去執行 I\O 操作。CPU 將這個工作交給DMA控制器來做,自己騰出時間做其他的事,當DMA完成工作時,DMA會主動告訴CPU「操作完成」。這時,CPU接管後續工作。在此,CPU 是被動的。DMA是專門 做 I\O 與 內存 數據交換的,不僅自身效率高,也節約了CPU時間,CPU在DMA開始和結束時做了一些設置罷了。
所以,調用一次,不必通報CPU,等緩沖區滿了,DMA 會對C PU 說 「嘿,伙計!快過來看看,把他們都搬走吧」。

綜上,設置緩沖,就建立了數據塊,使得DMA執行更方便,CPU也有空閑,而不是獃獃地候著I\O數據讀來。從微觀角度來說,設置緩沖效率要高很多。盡管,不能從這個程序上看出來。 幾萬字的讀寫\就能看到差距

『玖』 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 已過時。此類錯誤假定位元組能充分表示字元。

閱讀全文

與javaio原理相關的資料

熱點內容
網頁伺服器崩潰怎麼回事 瀏覽:650
cnc編程前景怎麼樣 瀏覽:319
lniux命令詳解 瀏覽:493
linuxmysql查詢日誌 瀏覽:368
老捷達夥伴壓縮比 瀏覽:93
改後綴加密 瀏覽:432
郵局選址問題演算法 瀏覽:14
河北伺服器內存雲主機 瀏覽:12
在電腦上怎麼找到加密狗圖標 瀏覽:435
電腦的瀏覽器怎麼打開pdf文件怎麼打開 瀏覽:142
pdf卡片庫下載 瀏覽:11
單片機中二進製表示什麼 瀏覽:725
java網路編程推薦 瀏覽:794
施耐德開關編程 瀏覽:66
組織胚胎學pdf 瀏覽:844
linux查看發包 瀏覽:496
加密貨幣交易所暴利時代 瀏覽:824
歌詞滾動效果android 瀏覽:14
程序員一天的六場戰斗 瀏覽:797
自製壓縮泵的做法 瀏覽:622