posts - 14,  comments - 7,  trackbacks - 0
                 

                  剛學java流技術IO編程時,一下出來這么多流,很是不敏感,不感冒,在學習了這段時間,發現好多項目中的讀寫數據,輸入輸出用到的都是以前學的最基本的,但是自己卻不是很理解其根本,今天就說幾個流中簡單但又常用的幾個知識點

             Java.io包中定義了多個流類型,來實現輸入輸出功能:

            •  按數據流的方向不同可以分為輸入流和輸出流。(以程序的角度來考慮)
            • 如:輸入流InputStream Reader 輸出流 OutputStream Writer
            •  按處理數據單位不同可以分為字節流和字符流。
            • : 字節流 InputStream OutputStream 字符流 Reader Writer
            •  按照功能不同可以分為節點流和處理流。

                  通俗的說節點流就是一個簡單的輸入輸出流,而處理流是“連接”在已存在的字節流或處理流之上的,通過對數據的處理為程序提供更為強大的讀寫功能。

           我們最經常用到的節點流類型是有關文件處理的有FileReader FileWriter FileInputStream FileOutputStream

          Ø          FileInputSteam FileOutputStream 類支持其父類InputStream OutputStream 所提供的數據讀寫方法。

          Ø       注意:

          §         在實例化FileInputStreamFileOutputSteam流時要用trycatch語句以處理其可能拋出的FileNotFoundException

          §         在讀寫數據時也要用trycatch語句以處理可能拋出的 IOException

          §         FileNotFoundExceptionIOException的子類

          FileReader FileWriter 分別繼承自ReaderWriterFileInputSteamFileOutputStream類似,所不同的時FileReaderFileWriter向文件輸入和輸出的數據單位為字符。

               處理流中常用到的有緩沖流 、轉換流。

          l          緩沖流有BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream ,緩沖流要“套接”在相應的節點流之上,對讀寫的數據提供了緩沖的功能,提高了讀寫的效率,同時增加了一些新的方法

          l          BufferedReader提供了readLine方法用于讀取一行字符串(以"r"n           隔)。

          l          BufferedWriter提供了newLine用于寫入一個行分隔符。

          l          對于輸出的緩沖流,寫出的數據會先在內存中緩存,使用flush方法將會使內存中的數據立刻寫出。

          Socket編程中接受信息時,不是直接用InputStream接收,而是把內容放入緩沖之中進行讀取 ,在Socket中的簡單應用如下
            

          package com.dr.Echo;

          import java.io.BufferedReader;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.InputStreamReader;
          import java.io.PrintStream;
          import java.net.ServerSocket;
          import java.net.Socket;

          public class EchoServer {

              
          /**
               * 
          @param args
               * 
          @throws IOException 
               
          */

              
          public static void main(String[] args) throws IOException {
                  
          // TODO Auto-generated method stub
                   ServerSocket server = null;
                   PrintStream out 
          = null;
                   BufferedReader buf 
          = null;
                   server 
          = new ServerSocket(9999);
                   Socket client 
          = null;
                   
          while(true){
                       
          //不斷接收數據
                       client = server.accept();
                       
          //準備好像客戶端輸出內容
                       out = new PrintStream(client.getOutputStream());
                       
          //而且客戶端要有輸入給服務器端
                       buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
                       
          //下面先給出一個完整的信息提示
                       out.println("您好!歡迎光臨:http://wwww.tstc.edu.cn");
                       out.println(
          "輸入bye表示退出哈-");
                       
          while(true){
                           
          //接受客戶端發送而來的內容
                           String str = buf.readLine();
                           System.out.println(
          "client's data is "+str);
                           
          if(str == null){
                               
          //如果str為空就表示退出
                               break;
                           }
          else{
                               
          //如果輸入的是bye則表示是退出系統
                               if("bye".equals(str)){
                                   
          break;
                               }

                               out.println(
          "xiaoxiao:"+str);
                           }

                       }

                       out.close();
                       buf.close();
                       client.close();
                   }

              }


          }

           

          package com.dr.Echo;

          import java.io.BufferedReader;
          import java.io.IOException;
          import java.io.InputStreamReader;
          import java.io.PrintStream;
          import java.net.Socket;
          import java.net.UnknownHostException;

          public class EchoClient {

              
          /**
               * 
          @param args
               * 
          @throws IOException 
               * 
          @throws UnknownHostException 
               
          */

              
          public static void main(String[] args) throws UnknownHostException, IOException {
                  
          // TODO Auto-generated method stub
                   Socket client = null;
                   BufferedReader buf 
          = null;
                   PrintStream out 
          = null;
                   client 
          = new Socket("127.0.0.1",9999);
                   buf 
          = new BufferedReader(new InputStreamReader(client.getInputStream()));
                   System.out.println(buf.readLine());
                   System.out.println(buf.readLine());
                   BufferedReader in 
          = new BufferedReader(new InputStreamReader(System.in));
                   
                   String userInput 
          = null;
                   out 
          = new PrintStream(client.getOutputStream());
                   
          while((userInput = in.readLine())!=null){
                       out.println(userInput);
                       System.out.println(buf.readLine());
                   }

                   out.close();
                   in.close();
                   client.close();
                   
                   
              }


          }

             

                轉換流InputStreamReader OutputStreamWriter 用于字節數據到字符數據之間的轉換。其中InputStreamReader 需要和InputStream”套接OutputStreamWriter需要和OutputStream套接

                數據流DataInputStream DataOutputStream 提供了可以存取與機器無關的java原始數據類型

          l              Print流:PrintWriterPrintStream都屬于輸出流,分別針對與字符和字節,PrintWriterPrintStream提供了重載的printPrintln方法用于多種數據類型的輸出。PrintWriterPrintStream的輸出操作不會拋出異常,用戶通過檢測錯誤狀態獲取錯誤信息。PrintWriterPrintStream有自動flush功能

          l           

           這幾個流的類型都是在以后的學習中經常用到的。就不一一做例子啦

           

                   以后所學到的所有流類型都是繼承 InputStream OutputStream Reader Writer 這四個抽象的流類型

          posted on 2011-01-18 22:26 迷人笑笑 閱讀(884) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2011年1月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(13)

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 淮北市| 永定县| 沁水县| 鹤峰县| 大足县| 武乡县| 汝城县| 报价| 万年县| 色达县| 洪雅县| 石嘴山市| 太原市| 阿城市| 兰考县| 长泰县| 杨浦区| 永平县| 乐山市| 肇东市| 梅河口市| 尼木县| 竹溪县| 乐清市| 岫岩| 德阳市| 七台河市| 太白县| 鸡东县| 云安县| 延庆县| 新沂市| 民县| 攀枝花市| 尼木县| 富宁县| 玛曲县| 普陀区| 桃源县| 南澳县| 沅陵县|