Java中流-----個人總結心得

来源:http://www.cnblogs.com/zhouguanglin/archive/2017/07/24/7226816.html
-Advertisement-
Play Games

流 數據流 用於傳輸數據。IO流 Input/Output流。數據從外部流向程式 輸入流;數據從程式流向外部的時候--輸出流。讀取一個文件 數據從文件流向程式 輸入流;向一個文件中寫入數據 數據從程式流向文件 輸出流 根據數據流動的方向:輸入流/輸出流 根據數據傳輸的形式:位元組流/字元流 輸入流 輸 ...


數據流---用於傳輸數據。IO流---Input/Output流。數據從外部流向程式---輸入流;數據從程式流向外部的時候--輸出流。讀取一個文件---數據從文件流向程式---輸入流;向一個文件中寫入數據---數據從程式流向文件---輸出流

根據數據流動的方向:輸入流/輸出流

根據數據傳輸的形式:位元組流/字元流

 

輸入流

輸出流

位元組流

InputStream

OutputSteam

字元流

Reader

Writer

 

這四個類是Java中四個流的基本類,但是這四個類都是抽象類,都不能用於直接創建對象

數據的來源:硬碟、網路、記憶體、輸入設備

向一個文件中去寫入數據---txt文件---字元流、輸出流、文件流---

最簡單的一個輸入流,寫入緩衝區中,再從緩衝區中讀取出來

 1 public static void main(String[] args) throws IOException {
 2         // TODO Auto-generated method stub
 3         String c;                    //設置一個字元串去接收緩衝區
 4         InputStreamReader IsReader=new InputStreamReader(System.in);//輸入流:鍵盤輸入
 5         BufferedReader bReader=new BufferedReader(IsReader);//將輸入的存入緩衝區中
 6         System.out.println("輸入字元按q退出");
 7         do {
 8             c= bReader.readLine();//從緩衝區中讀取
 9             System.out.println(c);
10         } while (!c.equals("q"));
11     }

 字元流

FileWriter

構造函數

FileWriter(String name)--傳入文件路徑,操作對應的文件---當文件不存在的時候,會創建這個文件;如果文件存在,則創建一個新文件覆蓋源文件。

重要方法

write(String s)---寫出字元串。數據不是直接寫到目的地而是寫到緩衝區中,等到緩衝區滿了之後才會寫到目的地中

flush()---沖刷緩衝區

close()---關閉流。流在關閉之前會自動的沖刷緩衝區。

代碼實現:

 1  public static void main(String[] args) throws IOException {   
 2           //創建一個FileWriter對象,並指定文件路徑,該文件會被創建到指定目錄下。如果該目錄有同名文件,那麼該文件將被覆蓋。 
 3             FileWriter fw = new FileWriter("1.txt");
 4             //調用write的方法將字元串寫到流中  
 5             fw.write("hello world!");  
 6             //刷新流對象緩衝中的數據,將數據刷到目的地中  
 7             fw.flush();  
 8             //關閉流資源,但是關閉之前會刷新一次內部緩衝中的數據。當我們結束輸入時候,必須close();  
 9             fw.write("刷新");  
10             fw.close();  
11             //flush和close的區別:flush刷新後可以繼續輸入,close刷新後不能繼續輸入。  
12         }  

 

流的異常處理

1. 流對象要外置定義內置初始化

2. 判斷流對象是否初始化成功---判斷流對象是否為空

3. 關流操作無論成功與否,都需要將流對象值為null

FileReader

 

1 public int read() throws IOException
讀取單個字元,返回一個int型變數代表讀取到的字元
2 public int read(char [] c, int offset, int len)
讀取字元到c數組,返回讀取到字元的個數

 

代碼實現:

 1      public static void main(String[] args) throws IOException {   
 2          //創建FileReader對象,並讀取1.txt文件
 3          FileReader fr = new FileReader("1.txt"); 
 4          //單字元讀取  。。。。。。多字元的讀取,創建數組將1.txt文件存入數組中,在讀取出來char []  buf = new char[6];   
 5          int ch = 0;     
 6        //一直讀取文件中的內容直到文件的尾部
 7          while((ch = fr.read())!=-1) {  
 8             /* 輸出字元串   
 9              * 
10              * String(char[] value , int offest,int count) 分配一個新的String,包含從offest開始的count個字元 new String(buf,0,ch}
11              * */ 
12             System.out.print((char)ch);  
13          }  
14          fr.close();  //關閉流
15         }  

 兩個結合可以實現一個文件的拷貝

將1.txt文件內容拷貝到2.txt中

代碼實現:

 1      public static void main(String[] args) throws IOException {   
 2          FileReader fr=new FileReader("1.txt");//先讀取需要拷貝的文件
 3          FileWriter fw=new FileWriter("2.txt");//拷貝文件內容複製到的另個文件路徑
 4          int ch=0;   
 5          while ((ch=fr.read())!=-1) {   //讀個讀取內容
 6             fw.write((char)ch);   //將讀取的內容寫入文件中
 7         }
 8          fr.close();  //關閉讀取流
 9          fw.close();//關閉寫入流
10      }

 

位元組流

其實位元組流和字元流是差不多的形式,看懂了上面,下麵就不用多說了

文件輸入流: FileInputStream類

 簡要的說是打開文件,將文件數據讀取到記憶體中

代碼實現:
1 public static void main(String[] args) throws IOException {   
2              FileInputStream fStream=new FileInputStream("1.txt");//創建文件輸入流對象
3              int ch=0;
4              while ((ch=fStream.read())!=-1) {   //依次讀取文件內容賦值給ch
5                 System.out.print((char)ch);     //輸出內容-----(char)ch轉換成字元輸出
6             }
7              }

文件輸出流: FileOutputStream類

目的是將記憶體中的數據讀取到文件中

代碼實現:
 1      public static void main(String[] args) throws IOException {   
 2          int count, n = 20;  
 3          //創建位元組數組
 4          byte buffer[] = new byte[n]; 
 5          //將輸入的位元組存入位元組數組中
 6          count = System.in.read(buffer);//System.in.read()返回的是輸入數值的 ASKII 碼(一個 int 整數)
 7          FileOutputStream fO=new FileOutputStream("1.txt"); //創建文件輸出流對象,指定文件路徑
 8          fO.write(buffer, 0, count); //將位元組寫入文件,顯示字元
 9          fO.close();//關閉流
10      }

 FileInputStream流和FileOutputStream的應用

將1.txt文件拷貝到2.txt 文件中

代碼實現:
 1  public static void main(String[] args) throws IOException {   
 2          FileInputStream fIn=new FileInputStream("1.txt");//創建文件輸入流對象  拷貝對象文件,指定文件路徑
 3          FileOutputStream fOut=new FileOutputStream("2.txt");//創建文件輸出流對象,,指定寫入內容的文件路徑
 4          int ch=0;
 5          while ((ch=fIn.read())!=-1) {//迴圈讀取
 6             fOut.write(ch);//將內容寫入
 7         }
 8          fIn.close();//關閉流
 9          fOut.close();//關閉流
10      }

 

OutputStreamWriter---將一個位元組輸出流轉化為字元輸出流

InputStreamReader---將一個位元組輸入流轉化為字元輸入流

 

緩衝區

        電腦訪問外部設備非常耗時。訪問外存的頻率越高,造成CPU閑置的概率就越大。為了減少訪問外存的次數,應該在一次對外設的訪問中,讀寫更多的數據。為此,除了程式和流節點間交換數據必需的讀寫機制外,還應該增加緩衝機制。緩衝流就是每一個數據流分配一個緩衝區,一個緩衝區就是一個臨時存儲數據的記憶體。這樣可以減少訪問硬碟的次數,提高傳輸效率。  

1. 字元流的緩衝區:BufferedReader和BufferedWreiter

* 緩衝區的出現時為了提高流的操作效率而出現的.

* 需要被提高效率的流作為參數傳遞給緩衝區的構造函數

* 在緩衝區中封裝了一個數組,存入數據後一次取出

BufferedReader

自帶了緩衝區,需要一個Reader對象來構建這個BufferedReader對象---BufferedReader最主要的作用提供緩衝區,從字元輸入流中來獲取數據;Reader對象來指名數據的具體來源

簡單代碼實現:
 1  public static void main(String[] args) throws IOException {   
 2          FileReader fReader=new FileReader("1.txt");//創建一個文件讀取對象,並讀取文件
 3          BufferedReader bReader=new BufferedReader(fReader);//將文件內容放入緩衝區中------  需要被提高效率的流作為參數傳遞給緩衝區的構造函數
 4          StringBuffer sBuffer=new StringBuffer();   //創建一個StringBuffer類的字元串後面接收讀出的數據
 5          while (bReader.ready()) {  //迴圈讀取知道文件尾部
 6             sBuffer.append((char)bReader.read());//將文件內容逐一添加到sBuffer中
 7         }
 8         System.out.println(sBuffer.toString());//輸出
 9         fReader.close();//關閉讀取流
10         bReader.close();//關閉緩衝區讀取流
11      }

 

BufferedWriter

代碼實現:
 1  public static void main(String[] args) throws IOException {   
 2              FileWriter  fWriter=new FileWriter("1.txt");//創建寫入流對象,並指定創建的文件路徑;
 3              BufferedWriter bWriter=new BufferedWriter(fWriter);//創建寫入流的緩衝區
 4              bWriter.write("abcdf");//向緩衝區寫入字元
 5              bWriter.flush(); //刷新緩衝區
 6              bWriter.newLine();//newLine()在不同的操作系統下自動轉義為當前系統認識對的回車換行
 7              bWriter.write("qwer");
 8              bWriter.flush(); //刷新緩衝區
 9              bWriter.close();//關閉緩衝區
10              fWriter.close();//關閉寫入流
11              }

 未寫完待續

系統流/標準流---位元組流

底層使用位元組流來實現的

System.out   標準輸出流

System.in    標準輸入流

System.err   標準錯誤流


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.先創建一個文件夾用以存放鏡像 2.運行vmware,點擊創建新的虛擬機 3.選擇典型安裝 4. 選擇稍後安裝操作系統 5.選擇客戶機操作系統為Linux,版本為CentOS 64位 6. 選擇一開始創建的用以存放鏡像的文件,並給虛擬機命名 7.選擇磁碟大小,選擇預設20G即可 8.點擊完成 9. ...
  • 做為程式員的我們,經常會要用到文件的上傳和下載功能。到了需要用的時候,各種查資料。有木有..有木有...。為了方便下次使用,這裡來做個總結和備忘。 利用表單實現文件上傳 最原始、最簡單、最粗暴的文件上傳。 前端代碼: 【註意】 1、需要post提交 2、enctype="multipart/form ...
  • 背水一戰 Windows 10 之 控制項(媒體類): 通過處理 Pointer 相關事件實現一個簡單的塗鴉板, InkCanvas 基礎知識 ...
  • 一個基於Entity Framework的自定義分頁,增刪改的通用實現,同時包含Entity的生成,Specification模式,Unit of Work實現。 ...
  • 引子在此前的一篇文章中,我介紹瞭如何在本地docker環境中運行ASP.NET Core跨平臺應用程式(http://www.cnblogs.com/chenxizhang/p/7148657.html),看起來非常不錯,不是嗎?那麼,如果我們希望真正在實際的生產環境去部署和運行這個應用程式,應該怎... ...
  • 在上一篇的EF之DB First中,存在以下的兩個問題: 1. 添加/編輯頁面顯示的是屬性名稱,而非自定義的名稱(如:姓名、專業...) 2. 添加/編輯時沒有加入驗證 3. 數據展示使用分頁 @Html.LabelFor(model => model.Name, htmlAttributes: n ...
  • yaml文件處理(http://pyyaml.org/wiki/PyYAMLDocumentation) 摘要: 本文講的是yaml在python上的使用教程詳解, YAML是一種容易人類閱讀、適合表示程式語言的數據結構、可用於不同程式間交換數據、支持泛型工具、支持串列處理、豐富的表達能力和可擴展性 ...
  • Numpy指南筆記 第2章:Numpy基礎 創建多維數組# coding:utf-8import numpy as npm=np.array([np.arange(2),np.arange(2)])print mprint m.shape 一維數組切片和索引# coding:utf-8import ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...