<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    rosial

    lost memory
    數據加載中……

    zz - Java 流(Stream)簡介:1、基本的輸入流和輸出流

    原作者為csdn上的 YidingHehttp://blog.csdn.net/YidingHe

    本人打算寫幾篇文章,介紹一下流。本文是針對初學者的,加上本人水平有限,所以不敢說寫得很高深。如果你是初學者,而且對流這個東西很頭疼,你就應該看看這個。

     

    本文發表在:http://blog.csdn.net/YidingHe,轉載請保留出處。

     

     


     

    流是 Java 中最重要的基本概念之一。文件讀寫、網絡收發、進程通信,幾乎所有需要輸入輸出的地方,都要用到流。

    流是做什么用的呢?就是做輸入輸出用的。為什么輸入輸出要用“流”這種方式呢?因為程序輸入輸出的基本單位是字節,輸入就是獲取一串字節,輸出就是發送一串字節。但是很多情況下,程序不可能接收所有的字節之后再進行處理,而是接收一點處理一點。比方你下載魔獸世界,不可能全部下載到內存里再保存到硬盤上,而是下載一點就保存一點。這時,流這種方式就非常適合。

    在 Java 中,每個流都是一個對象。流分為兩種:輸入流(InputStream)和輸出流(OutputStream)。對于輸入流,你只要從流當中不停地把字節取出來就是了;而對于輸出流,你只要把準備好的字節串傳給它就行。

              ______________Java 程序____________
              |                                 |
    外部系統 --|--(輸入流)--> 處理邏輯 --(輸出流)---|--> 外部系統
              |_________________________________|



    流對象是怎么獲得的呢?不同的外部系統,獲取流的方式也不同。例如,文件讀寫就要創建 FileInputStream/FileOutputStream 對象,而網絡通信是通過 Socket 對象來獲取輸入輸出流的。一般來說,如果一個類有 getInputStream() 或 getOutputStream() 這樣的方法,就表明它是通過流對象來進行輸入輸出的。

     

    InputStream 是輸入流,下面是一個通過 InputStream 讀取文件的例子:

    1. import java.io.File;  
    2. import java.io.FileInputStream;  
    3. import java.io.IOException;  
    4. import java.io.InputStream;  
    5. import java.io.FileNotFoundException;  
    6. import java.util.Arrays;  
    7.    
    8. /** 
    9.  * 通過流讀取文件 
    10.  */  
    11. public class ReadFileDemo {  
    12.    
    13.     // 程序入口  
    14.     public static void main(String[] args) {  
    15.         String path = "c:/boot.ini";  
    16.         File file = new File(path);  
    17.    
    18.         // 創建輸入流  
    19.         InputStream is;  
    20.         try {  
    21.             is = new FileInputStream(file);  
    22.         } catch (FileNotFoundException e) {  
    23.             System.err.println("文件 " + path + " 不存在。");  
    24.             return;  
    25.         }  
    26.    
    27.         // 開始讀取  
    28.         byte[] content = new byte[0];       // 保存讀取出來的文件內容  
    29.         byte[] buffer = new byte[10240];    // 定義緩存  
    30.    
    31.         try {  
    32.             int eachTime = is.read(buffer); // 第一次讀取。如果返回值為 -1 就表示沒有內容可讀了。  
    33.             while (eachTime != -1) {  
    34.                 // 讀取出來的內容放在 buffer 中,現在將其合并到 content。  
    35.                 content = concatByteArrays(content, buffer, eachTime);  
    36.                 eachTime = is.read(buffer); // 繼續讀取  
    37.             }  
    38.         } catch (IOException e) {  
    39.             System.err.println("讀取文件內容失敗。");  
    40.             e.printStackTrace();  
    41.         } finally {  
    42.             try {  
    43.                 is.close();  
    44.             } catch (IOException e) {  
    45.                 // 這里的異常可以忽略不處理  
    46.             }  
    47.         }  
    48.    
    49.         // 輸出文件內容  
    50.         String contentStr = new String(content);  
    51.         System.out.println(contentStr);  
    52.     }  
    53.    
    54.     /** 
    55.      * 合并兩個字節串 
    56.      * 
    57.      * @param bytes1       字節串1 
    58.      * @param bytes2       字節串2 
    59.      * @param sizeOfBytes2 需要從 bytes2 中取出的長度 
    60.      * 
    61.      * @return bytes1 和 bytes2 中的前 sizeOfBytes2 個字節合并后的結果 
    62.      */  
    63.     private static byte[] concatByteArrays(byte[] bytes1, byte[] bytes2, int sizeOfBytes2) {  
    64.         byte[] result = Arrays.copyOf(bytes1, (bytes1.length + sizeOfBytes2));  
    65.         System.arraycopy(bytes2, 0, result, bytes1.length, sizeOfBytes2);  
    66.         return result;  
    67.     }  
    68. }  

     

     

    雖然寫得很啰嗦,但這確實是 InputStream 的基本用法。注意,這只是一個例子,說明如何從輸入流中讀取字節串。實際上,Java 提供更簡單的方式來讀取文本文件。以后將會介紹。

    相比從流中讀取,使用 OutputStream 輸出則是非常簡單的事情。下面是一個例子:

    1. import java.io.OutputStream;  
    2. import java.io.FileOutputStream;  
    3. import java.io.File;  
    4. import java.io.IOException;  
    5. import java.util.Date;  
    6.    
    7. /** 
    8.  * 將當前日期保存到文件 
    9.  */  
    10. public class SaveFileDemo {  
    11.    
    12.     public static void main(String[] args) throws IOException {  
    13.         String path = "c:/now.txt";  
    14.    
    15.         File file = new File(path);  
    16.         if (!file.exists() && !file.createNewFile()) {  
    17.             System.err.println("無法創建文件。");  
    18.             return;  
    19.         }  
    20.    
    21.         OutputStream os = new FileOutputStream(file);   // 創建輸出流(前提是文件存在)  
    22.         os.write(new Date().toString().getBytes());     // 將當前時間寫入文件  
    23.         os.close();                                     // 必須關閉流,內容才會寫入文件。  
    24.         System.out.println("文件寫入完成。");  
    25.     }  
    26. }  

     

    Java 還提供其它的流操作方式,但它們都是對 InputStream 和 OutputStream 進行擴展或包裝。所以這兩個類是基礎,必須要理解它們的使用。

     

     

    posted on 2012-03-02 20:20 rosial 閱讀(287) 評論(0)  編輯  收藏 所屬分類: 技術轉帖留存

    主站蜘蛛池模板: 亚洲精品国产字幕久久不卡| 国产在线jyzzjyzz免费麻豆 | 亚洲中文字幕无码中文字在线| 又粗又大又硬又爽的免费视频| 免费无码成人AV片在线在线播放| 成人毛片免费观看视频| 在线免费观看视频你懂的| 日韩成全视频观看免费观看高清| 日韩在线免费看网站| 四虎国产精品免费视| 亚洲国产专区一区| 自拍偷自拍亚洲精品被多人伦好爽| 国产午夜亚洲精品午夜鲁丝片| 国产亚洲精品a在线无码| 亚洲精品免费在线观看| 亚洲成年人免费网站| 亚洲国产乱码最新视频 | 亚洲av无码国产精品色午夜字幕 | 国产免费人人看大香伊| 亚洲国产成人a精品不卡在线| 2022中文字字幕久亚洲| 亚洲av无码乱码国产精品fc2| 亚洲视频小说图片| 亚洲熟女乱色一区二区三区| 美女羞羞视频免费网站| 国产一级a毛一级a看免费视频 | 91视频免费观看| 在线观看www日本免费网站| 国产一卡2卡3卡4卡2021免费观看| 免费看香港一级毛片| 亚洲精品成人片在线观看| 国产v亚洲v天堂无码网站| 亚洲图片中文字幕| 国产亚洲精品91| 叮咚影视在线观看免费完整版| 精品久久8x国产免费观看| 国产美女精品视频免费观看| 亚洲免费人成在线视频观看| 91亚洲精品麻豆| 一级毛片一级毛片免费毛片| 真实国产乱子伦精品免费|