posts - 14,  comments - 7,  trackbacks - 0
            2010年10月20日
                 

                  剛學(xué)java流技術(shù)IO編程時(shí),一下出來(lái)這么多流,很是不敏感,不感冒,在學(xué)習(xí)了這段時(shí)間,發(fā)現(xiàn)好多項(xiàng)目中的讀寫(xiě)數(shù)據(jù),輸入輸出用到的都是以前學(xué)的最基本的,但是自己卻不是很理解其根本,今天就說(shuō)幾個(gè)流中簡(jiǎn)單但又常用的幾個(gè)知識(shí)點(diǎn)

             Java.io包中定義了多個(gè)流類型,來(lái)實(shí)現(xiàn)輸入輸出功能:

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

                  通俗的說(shuō)節(jié)點(diǎn)流就是一個(gè)簡(jiǎn)單的輸入輸出流,而處理流是“連接”在已存在的字節(jié)流或處理流之上的,通過(guò)對(duì)數(shù)據(jù)的處理為程序提供更為強(qiáng)大的讀寫(xiě)功能。

           我們最經(jīng)常用到的節(jié)點(diǎn)流類型是有關(guān)文件處理的有FileReader FileWriter FileInputStream FileOutputStream

          Ø          FileInputSteam FileOutputStream 類支持其父類InputStream OutputStream 所提供的數(shù)據(jù)讀寫(xiě)方法。

          Ø       注意:

          §         在實(shí)例化FileInputStreamFileOutputSteam流時(shí)要用trycatch語(yǔ)句以處理其可能拋出的FileNotFoundException。

          §         在讀寫(xiě)數(shù)據(jù)時(shí)也要用trycatch語(yǔ)句以處理可能拋出的 IOException。

          §         FileNotFoundExceptionIOException的子類

          FileReader FileWriter 分別繼承自ReaderWriter,FileInputSteamFileOutputStream類似,所不同的時(shí)FileReaderFileWriter向文件輸入和輸出的數(shù)據(jù)單位為字符。

               處理流中常用到的有緩沖流 、轉(zhuǎn)換流。

          l          緩沖流有BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream ,緩沖流要“套接”在相應(yīng)的節(jié)點(diǎn)流之上,對(duì)讀寫(xiě)的數(shù)據(jù)提供了緩沖的功能,提高了讀寫(xiě)的效率,同時(shí)增加了一些新的方法

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

          l          BufferedWriter提供了newLine用于寫(xiě)入一個(gè)行分隔符。

          l          對(duì)于輸出的緩沖流,寫(xiě)出的數(shù)據(jù)會(huì)先在內(nèi)存中緩存,使用flush方法將會(huì)使內(nèi)存中的數(shù)據(jù)立刻寫(xiě)出。

          Socket編程中接受信息時(shí),不是直接用InputStream接收,而是把內(nèi)容放入緩沖之中進(jìn)行讀取 ,在Socket中的簡(jiǎn)單應(yīng)用如下
            

          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){
                       
          //不斷接收數(shù)據(jù)
                       client = server.accept();
                       
          //準(zhǔn)備好像客戶端輸出內(nèi)容
                       out = new PrintStream(client.getOutputStream());
                       
          //而且客戶端要有輸入給服務(wù)器端
                       buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
                       
          //下面先給出一個(gè)完整的信息提示
                       out.println("您好!歡迎光臨:http://wwww.tstc.edu.cn");
                       out.println(
          "輸入bye表示退出哈-");
                       
          while(true){
                           
          //接受客戶端發(fā)送而來(lái)的內(nèi)容
                           String str = buf.readLine();
                           System.out.println(
          "client's data is "+str);
                           
          if(str == null){
                               
          //如果str為空就表示退出
                               break;
                           }
          else{
                               
          //如果輸入的是bye則表示是退出系統(tǒng)
                               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();
                   
                   
              }


          }

             

                轉(zhuǎn)換流InputStreamReader OutputStreamWriter 用于字節(jié)數(shù)據(jù)到字符數(shù)據(jù)之間的轉(zhuǎn)換。其中InputStreamReader 需要和InputStream”套接,OutputStreamWriter需要和OutputStream套接

                數(shù)據(jù)流DataInputStream DataOutputStream 提供了可以存取與機(jī)器無(wú)關(guān)的java原始數(shù)據(jù)類型

          l              Print流:PrintWriterPrintStream都屬于輸出流,分別針對(duì)與字符和字節(jié),PrintWriterPrintStream提供了重載的print,Println方法用于多種數(shù)據(jù)類型的輸出。PrintWriterPrintStream的輸出操作不會(huì)拋出異常,用戶通過(guò)檢測(cè)錯(cuò)誤狀態(tài)獲取錯(cuò)誤信息。PrintWriterPrintStream有自動(dòng)flush功能

          l           

           這幾個(gè)流的類型都是在以后的學(xué)習(xí)中經(jīng)常用到的。就不一一做例子啦

           

                   以后所學(xué)到的所有流類型都是繼承 InputStream OutputStream Reader Writer 這四個(gè)抽象的流類型

          posted @ 2011-01-18 22:26 迷人笑笑 閱讀(885) | 評(píng)論 (0)編輯 收藏
               摘要:           我相信大多說(shuō)人都對(duì)構(gòu)造方法、方法不陌生,而且很了解,但我也相信有很多像我這樣的沒(méi)有一個(gè)很好很清晰很全面的認(rèn)識(shí),今天就把它整理如下,希望能給大家?guī)?lái)點(diǎn)方便與幫助,也希望大家多多討論。         ...  閱讀全文
          posted @ 2010-11-12 16:43 迷人笑笑 閱讀(39166) | 評(píng)論 (1)編輯 收藏
               摘要:        今天我們用實(shí)例程序說(shuō)一下java中常見(jiàn)的生產(chǎn)者與消費(fèi)者的問(wèn)題。  首先看一下里面線程間的通信問(wèn)題:    一個(gè)線程向數(shù)據(jù)存儲(chǔ)空間添加數(shù)據(jù)(生產(chǎn)者),另一個(gè)線程從數(shù)據(jù)存儲(chǔ)空間去出數(shù)據(jù)(消費(fèi)者)。 這個(gè)程序中有兩個(gè)可能出現(xiàn)的問(wèn)題需要考慮: 1、   ...  閱讀全文
          posted @ 2010-11-10 23:07 迷人笑笑 閱讀(2164) | 評(píng)論 (1)編輯 收藏
               摘要: 項(xiàng)目需求:1.病人來(lái)掛號(hào)時(shí)根據(jù)自己想找的醫(yī)生掛相應(yīng)的醫(yī)生的號(hào),即加到相應(yīng)醫(yī)生的病人隊(duì)列中。                    2.醫(yī)生看見(jiàn)自己的屏幕,點(diǎn)擊自己的名字,得到自己相應(yīng)列表的下一位病人 具體代碼如下: ...  閱讀全文
          posted @ 2010-11-02 16:51 迷人笑笑 閱讀(3469) | 評(píng)論 (1)編輯 收藏
               摘要: 1.當(dāng)我們?nèi)ャy行辦理什么業(yè)務(wù)的時(shí)候總會(huì)先在一個(gè)類似電腦的小系統(tǒng)上去一個(gè)號(hào),然后等著,當(dāng)被叫到時(shí)就去相應(yīng)的窗口辦理業(yè)務(wù),這種排隊(duì)的小系統(tǒng)主要用到了接口Queue,因?yàn)樗详?duì)列的要求先進(jìn)先出。 2.還有就是有種特殊情況就是,銀行的金卡用戶,他們的權(quán)限較高,總可以在普通用戶的前面辦理業(yè)務(wù) 相應(yīng)代碼如下: package com.dr.queue; public clas...  閱讀全文
          posted @ 2010-11-01 13:22 迷人笑笑 閱讀(3772) | 評(píng)論 (0)編輯 收藏
          代碼如下:
          package com.dr.exercise6;

          import java.util.Scanner;

          public class Login {
              
          public static void main(String[] args) {
                  Scanner s 
          = new Scanner(System.in);
                  System.out.println(
          "請(qǐng)輸入用戶名:");
                  String name 
          = s.nextLine();
                  System.out.println(
          "請(qǐng)輸入密碼:");
                  String password 
          = s.nextLine();
                  
          if(name.equals("abc")&&password.equals("123")){
                      System.out.println(
          "歡迎登入??!");
                      
                  }

                  
          else{
                      System.out.println(
          "用戶名或密碼不正確!!");
                  }


              }


          }

          用戶名密碼輸入正確時(shí):
          用戶名或密碼輸入不正確時(shí):
          posted @ 2010-10-20 16:33 迷人笑笑 閱讀(625) | 評(píng)論 (0)編輯 收藏
          <2010年10月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿(13)

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 乌兰浩特市| 长治县| 正蓝旗| 十堰市| 永德县| 金堂县| 太和县| 昭通市| 侯马市| 淮安市| 德钦县| 南投县| 深水埗区| 芜湖县| 通州市| 怀仁县| 定襄县| 锦州市| 永吉县| 蛟河市| 临夏市| 贵港市| 即墨市| 秦皇岛市| 邯郸县| 确山县| 新营市| 绵竹市| 辽源市| 老河口市| 清水河县| 东明县| 新营市| 庐江县| 河池市| 台北市| 黄大仙区| 焉耆| 新巴尔虎左旗| 海晏县| 大埔区|