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

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

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

    csusky

    常用鏈接

    統計

    最新評論

    SOCKET基礎 學習筆記

     

      1package com;
      2
      3import java.io.BufferedReader;
      4import java.io.ByteArrayOutputStream;
      5import java.io.FilterOutputStream;
      6import java.io.IOException;
      7import java.io.InputStreamReader;
      8import java.io.OutputStream;
      9import java.net.URL;
     10import java.net.URLConnection;
     11import java.util.Date;
     12import java.util.List;
     13import java.util.Map;
     14
     15public class URLConnectionTest {
     16        
     17     public static void main(String[] args) {
     18        
     19         try {
     20             URL url=new URL("http://www.sina.com");
     21             URLConnection con=url.openConnection();
     22             con.connect();
     23             //批量打印出請求頭信息
     24             Map<String,List<String>> map=con.getHeaderFields();
     25             for(Map.Entry<String, List<String>> entry:map.entrySet()) {
     26                 String key=entry.getKey();
     27                 for(String value:entry.getValue()) {
     28                     System.out.println(key+"-------------"+value);
     29                 }

     30             }

     31             
     32           
     33           URLConnectionTest test=new URLConnectionTest();
     34           //對字符串"chenxiaoyu"進行  Base64 編碼
     35           System.out.println(test.base64Encode("chenxiaoyu"));
     36           
     37           
     38            //按條件打印出相關的請求頭信息
     39             System.out.println("------------------");
     40             System.out.println("ContentType():"+con.getContentType());
     41             System.out.println("getContentLength():"+con.getContentLength());
     42             System.out.println("getContentEncoding():"+con.getContentEncoding());
     43             System.out.println("getDate():"+con.getDate());
     44             System.out.println("getLastModified():"+new Date(con.getLastModified()));
     45             System.out.println("------------------");
     46             
     47             //inputStreamReader 是字節到字符的一個橋梁,可以制定字符的字符編碼
     48             //下面的方法也是解決網絡編程中中文亂碼常用的方法
     49             //例如:已知某個response的編碼為utf-8
     50             //則要正確顯示返回的信息,需要把下面的 gbk 參數換為 utf-8 ,否則會出現亂碼或者無法編碼的問題
     51             BufferedReader br=new BufferedReader(new InputStreamReader(con.getInputStream(),"gbk"));
     52             
     53             String s;
     54             //下面的方法打印出新浪網首頁的信息
     55             while((s=br.readLine())!=null{
     56                 System.out.println(s);
     57             }

     58             
     59             
     60         }
     catch(Exception e) {
     61             e.printStackTrace();
     62         }

     63         
     64     }

     65     
     66     public  String base64Encode(String s){
     67         OutputStream bao=new ByteArrayOutputStream();
     68         Base64OutputStream b64out=new Base64OutputStream(bao);
     69         try {
     70             b64out.write(s.getBytes());
     71             b64out.flush();
     72             }
     catch(Exception e) {
     73                 e.printStackTrace();
     74             }

     75             return bao.toString();
     76         }

     77         
     78     }

     79     
     80   //下面是一個Base64編碼的實現方式,所謂Base64編碼是一種加密方式,旨在使人們一眼不能看出信息的真是內容,并不能防止被破解
     81  //采用的是對每24個bit(3個字節)進行編碼,方法是按每6個bit位編碼成一個字節 則3個字節的真實數據加密后形成4個字節的數據
     82  //(在高兩位補0) 每個字節的10進制數據對應固定數組  enconding 的下標 ,如果一個新字節的編碼為i則其編碼字符為enconding[i]
     83class Base64OutputStream extends FilterOutputStream {
     84    
     85    public Base64OutputStream(OutputStream os) {
     86        super(os);
     87    }

     88    
     89    public void write(int c) throws IOException {
     90        buffer[i]=c;
     91        i++;
     92        if(i==3{
     93            //取第一個字節的前6位又移兩位得到一個新的字節
     94            super.write(toBase64[buffer[0]&0xfc>>2]);   
     95            //取第一個字節的后兩位左移4位得到第二個新的字節的前兩位   然后取第二個字節的前四位右移4位得到第二個新字節的后四位  
     96            //然后將兩次取得的bit位用'|'連接起來  得到第二個新的字節
     97            super.write(toBase64[((buffer[0]&0x03)<<4)|((buffer[1])&0xf0>>4)]);
     98        
     99            super.write(toBase64[((buffer[1]&0x0f)<<2)|((buffer[2]&0xc0)>>6)]);
    100            super.write(toBase64[(buffer[2]&0x3f)]);
    101            col+=4;
    102            i=0;
    103            if(col>=76{
    104                super.write('\n');
    105                col=0;
    106            }

    107            
    108        }
            
    109         
    110    }

    111    
    112    //如果待編碼的字符串不足3個字節,則采用如下方式進行編碼
    113    public void flush() throws IOException {
    114        //如果只有一個字節
    115        if(i==1{
    116            //第一個新的字節的產生同前
    117            super.write(toBase64[buffer[0]&0xfc>>2]);  //base64編碼
    118            //第二個新字節  取第二個字節的后兩位左移4位得到第二個新的字節,由于后面沒有待編碼的字節,所以在低四補0000
    119            //第二個新的字節的二進制形式為  00XX 0000
    120            super.write(toBase64[(buffer[0]&0x03)<<4]);
    121            //后兩個新字節采用連個'='進行補充
    122            super.write('=');
    123            super.write('=');
    124        }

    125        //如果只有兩個字節
    126        else if (i==2{
    127            //第一、二個新字節的產生
    128            super.write(toBase64[buffer[0]&0xfc]>>2);
    129            super.write(toBase64[((buffer[0]&0x03)<<4)|((buffer[1])&0xf0>>4)]);
    130            super.write(toBase64[((buffer[1]&0x0f)<<2)]);
    131            super.write('=');            
    132        }

    133    }

    134    
    135    
    136    
    137    private static char[] toBase64=
    138    {
    139     'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
    140     'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
    141     'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
    142     'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'
    143     }
    ;
    144    
    145    private int i=0;
    146    
    147    private int col=0;
    148    
    149    private int[] buffer=new int[3];
    150    
    151    
    152    
    153}

    154
    155
    156
    157
    158
    159
    160
    161

    posted on 2008-02-22 16:26 曉宇 閱讀(238) 評論(0)  編輯  收藏 所屬分類: JAVA基礎

    主站蜘蛛池模板: 456亚洲人成在线播放网站| 色噜噜的亚洲男人的天堂| 欧美三级在线电影免费| 国产免费人成视频尤勿视频| 亚洲精品无码乱码成人| 国产成人精品免费视频网页大全| 亚洲JLZZJLZZ少妇| 久久精品国产亚洲| 免费无码又爽又刺激毛片| 中文字幕免费视频精品一| 亚洲天堂电影在线观看| 亚洲人成人网站在线观看| 精品国产无限资源免费观看| 免费一级做a爰片久久毛片潮| 亚洲视频在线观看| 亚洲精品国产福利一二区| 国产91免费在线观看| 久久久精品视频免费观看 | 一级**爱片免费视频| 亚洲成人动漫在线观看| 久久国产成人精品国产成人亚洲| 99久久久精品免费观看国产| 一级一黄在线观看视频免费| 亚洲精品国产第一综合99久久| 亚洲成色www久久网站夜月| 国产aa免费视频| 91手机看片国产永久免费| 亚洲免费人成在线视频观看| 国产成人综合久久精品亚洲| 亚洲理论片在线观看| 国产AV无码专区亚洲AV毛网站| 国产在线ts人妖免费视频| 国产大片线上免费观看| 免费精品无码AV片在线观看 | 成人免费看黄20分钟| 99re6在线视频精品免费下载| 国产精品永久免费视频| 亚洲1区2区3区精华液| 亚洲精品456人成在线| 亚洲男人电影天堂| 亚洲av日韩av天堂影片精品|