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

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

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

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

            剛學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 分別繼承自ReaderWriter,FileInputSteamFileOutputStream類似,所不同的時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提供了重載的print,Println方法用于多種數據類型的輸出。PrintWriterPrintStream的輸出操作不會拋出異常,用戶通過檢測錯誤狀態獲取錯誤信息。PrintWriterPrintStream有自動flush功能

    l           

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

     

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

    posted @ 2011-01-18 22:26 迷人笑笑 閱讀(881) | 評論 (0)編輯 收藏
         摘要:           我相信大多說人都對構造方法、方法不陌生,而且很了解,但我也相信有很多像我這樣的沒有一個很好很清晰很全面的認識,今天就把它整理如下,希望能給大家帶來點方便與幫助,也希望大家多多討論。         ...  閱讀全文
    posted @ 2010-11-12 16:43 迷人笑笑 閱讀(39161) | 評論 (1)編輯 收藏
         摘要:        今天我們用實例程序說一下java中常見的生產者與消費者的問題。  首先看一下里面線程間的通信問題:    一個線程向數據存儲空間添加數據(生產者),另一個線程從數據存儲空間去出數據(消費者)。 這個程序中有兩個可能出現的問題需要考慮: 1、   ...  閱讀全文
    posted @ 2010-11-10 23:07 迷人笑笑 閱讀(2158) | 評論 (1)編輯 收藏
         摘要: 項目需求:1.病人來掛號時根據自己想找的醫生掛相應的醫生的號,即加到相應醫生的病人隊列中。                    2.醫生看見自己的屏幕,點擊自己的名字,得到自己相應列表的下一位病人 具體代碼如下: ...  閱讀全文
    posted @ 2010-11-02 16:51 迷人笑笑 閱讀(3464) | 評論 (1)編輯 收藏
         摘要: 1.當我們去銀行辦理什么業務的時候總會先在一個類似電腦的小系統上去一個號,然后等著,當被叫到時就去相應的窗口辦理業務,這種排隊的小系統主要用到了接口Queue,因為它符合隊列的要求先進先出。 2.還有就是有種特殊情況就是,銀行的金卡用戶,他們的權限較高,總可以在普通用戶的前面辦理業務 相應代碼如下: package com.dr.queue; public clas...  閱讀全文
    posted @ 2010-11-01 13:22 迷人笑笑 閱讀(3767) | 評論 (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(
    "請輸入用戶名:");
            String name 
    = s.nextLine();
            System.out.println(
    "請輸入密碼:");
            String password 
    = s.nextLine();
            
    if(name.equals("abc")&&password.equals("123")){
                System.out.println(
    "歡迎登入!!");
                
            }

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


        }


    }

    用戶名密碼輸入正確時:
    用戶名或密碼輸入不正確時:
    posted @ 2010-10-20 16:33 迷人笑笑 閱讀(621) | 評論 (0)編輯 收藏
    答案是兩個,現在我們具體的說一下:
    String s = new String("abc");
    首先我們要明白兩個概念,引用變量和對象,對象一般通過new在堆中創建,s只是一個引用變量。
    所有的字符串都是String對象,由于字符串文字的大量使用,java中為了節省時間,在編譯階段,會把字符串文字放在文字池中,文字池的一個好處就是可以把相同的字符串合并,占用一個空間,我們可以用==判斷一下兩個引用變量是否指向了一個地址即一個對象
    public class Demo02 {
        
    public static void main(String[] args) {
            
    // TODO Auto-generated method stub
            String s1 ="abc";
            String s2 
    = "abc" ;
            
    if( s1 == s2 ) System.out.println("s1,s2 refer to the same object");
            
    else System.out.println("trouble");
        }

    }
    輸出結果為:
    可以看出指向了一個對象,即文字池中保存了一個對象。
    二、String s = new String("abc")實際上是"abc"本身就是文字池中的一個對象,在運行 new String()時,把文字池即pool中的字符串"abc"復制到堆中,并把這個對象的應用交給s,所以創建了兩個String對象,一個在pool中,一個在堆中。下面看這個程序,創建了幾個對象。
    public class Demo03 {
        
    public static void main(String[] args) {
            
    // TODO Auto-generated method stub
            String s1 = new String("abc") ;
            String s2 
    = new String("abc") ;
            
    if( s1 == s2 )//不會執行的語句}
           System.out.println("在堆中創建了一個對象");

        }

            
    else{
            System.out.println(
    "在堆中創建了兩個對象");    
            }

            }

    }
    輸出結果為:
    可知在堆中創建了兩個對象,但是在文字池中有一個對象,所以共創建了三個對象。
    三、再看下一個例子:
    public class Demo04 {
        
    public static void main(String[] args) {
            
    // TODO Auto-generated method stub
            String s = new String("abc");
            s 
    = "cba";
            System.out.println(s); 
        }


    }
    輸出結果為:
    String s = new String("abc")并不是給s賦值,而是把字符串"abc"的引用交給s持有,現在把s指向字符串"cba","cba"的引用地址把"abc"的引用地址覆蓋,所以輸出結果為cba

    最后這個輸出結果的解釋,希望大家指出不足??!

    posted @ 2010-10-18 14:32 迷人笑笑 閱讀(10653) | 評論 (0)編輯 收藏
    <2010年10月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    常用鏈接

    留言簿(13)

    隨筆檔案

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成**人免费一级毛片| 毛片免费在线观看网址| 久久精品国产亚洲AV电影| 成年人性生活免费视频| 国产va免费精品| 中文字幕亚洲综合久久| 国产精品四虎在线观看免费| 少妇性饥渴无码A区免费| 亚洲二区在线视频| 亚洲国产成人VA在线观看| 久久成人免费大片| 国产亚洲精品免费| 亚洲精品视频免费看| 亚洲一级特黄大片在线观看| 国产精品视频免费观看| 免费国产a理论片| 亚洲图片中文字幕| 亚洲日韩人妻第一页| 国产无人区码卡二卡三卡免费| 免费无码婬片aaa直播表情| 亚洲黄色免费网站| 久久亚洲AV无码西西人体| 最近的免费中文字幕视频| 国产亚洲免费的视频看| 国产精品亚洲lv粉色| 亚洲精品无码久久毛片波多野吉衣 | 亚洲αv在线精品糸列| 免费的涩涩视频在线播放 | 国产免费久久精品| 99久久免费观看| a级毛片免费网站| 亚洲av永久无码天堂网| 亚洲网址在线观看| 伊人久久亚洲综合| 四虎影视在线永久免费看黄| 一个人看www在线高清免费看 | 1000部免费啪啪十八未年禁止观看| 猫咪免费人成网站在线观看入口| 久久久久久亚洲精品影院| 亚洲尹人九九大色香蕉网站 | 亚洲综合在线成人一区|