1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      JavaSocket實現(xiàn)傳輸壓縮對象的方法示例

      本文實例講述了Java Socket實現(xiàn)傳輸壓縮對象的方法。分享給大家供大家參考,具體如下:

      創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、周口網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為周口等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

      前面文章《Java Socket實現(xiàn)的傳輸對象功能示例》說到了用Java Socket來傳輸對象,但是在有些情況下比如網(wǎng)絡(luò)環(huán)境不好或者對象比較大的情況下需要把數(shù)據(jù)對象進(jìn)行壓縮然后在傳輸,此時就需要壓縮這些對象流,此時就可以GZIPInputStream和GZIPOutputStream來處理一下socket的InputStream和OutputStream。

      仍然需要一個實現(xiàn)了java.io.Serializable接口的簡單Java對象

      package com.googlecode.garbagecan.test.socket.sample4;
      public class User implements java.io.Serializable {
        private static final long serialVersionUID = 1L;
        private String name;
        private String password;
        public User() {
        }
        public User(String name, String password) {
          this.name = name;
          this.password = password;
        }
        public String getName() {
          return name;
        }
        public void setName(String name) {
          this.name = name;
        }
        public String getPassword() {
          return password;
        }
        public void setPassword(String password) {
          this.password = password;
        }
      }
      
      

      在Server端使用,socket的InputStream首先被包裝成GZIPInputStream,然后又被包裝成ObjectInputStream,而socket的OutputStream首先被包裝成GZIPOutputStream,然后又被包裝成ObjectOutputStream,如下:

      package com.googlecode.garbagecan.test.socket.sample4;
      import java.io.IOException;
      import java.io.ObjectInputStream;
      import java.io.ObjectOutputStream;
      import java.net.ServerSocket;
      import java.net.Socket;
      import java.util.logging.Level;
      import java.util.logging.Logger;
      import java.util.zip.GZIPInputStream;
      import java.util.zip.GZIPOutputStream;
      public class MyServer {
        private final static Logger logger = Logger.getLogger(MyServer.class.getName());
        public static void main(String[] args) throws IOException {
          ServerSocket server = new ServerSocket(10000);
          while (true) {
            Socket socket = server.accept();
            socket.setSoTimeout(10 * 1000);
            invoke(socket);
          }
        }
        private static void invoke(final Socket socket) throws IOException {
          new Thread(new Runnable() {
            public void run() {
              GZIPInputStream gzipis = null;
              ObjectInputStream ois = null;
              GZIPOutputStream gzipos = null;
              ObjectOutputStream oos = null;
              try {
                gzipis = new GZIPInputStream(socket.getInputStream());
                ois = new ObjectInputStream(gzipis);
                gzipos = new GZIPOutputStream(socket.getOutputStream());
                oos = new ObjectOutputStream(gzipos);
                Object obj = ois.readObject();
                User user = (User)obj;
                System.out.println("user: " + user.getName() + "/" + user.getPassword());
                user.setName(user.getName() + "_new");
                user.setPassword(user.getPassword() + "_new");
                oos.writeObject(user);
                oos.flush();
                gzipos.finish();
              } catch (IOException ex) {
                logger.log(Level.SEVERE, null, ex);
              } catch(ClassNotFoundException ex) {
                logger.log(Level.SEVERE, null, ex);
              } finally {
                try {
                  ois.close();
                } catch(Exception ex) {}
                try {
                  oos.close();
                } catch(Exception ex) {}
                try {
                  socket.close();
                } catch(Exception ex) {}
              }
            }
          }).start();
        }
      }
      
      

      Client也和Server端類似,同樣要不socket的XXXStream包裝成GZIPXXXStream,然后再包裝成ObjectXXXStream,如下:

      package com.googlecode.garbagecan.test.socket.sample4;
      import java.io.IOException;
      import java.io.ObjectInputStream;
      import java.io.ObjectOutputStream;
      import java.net.InetSocketAddress;
      import java.net.Socket;
      import java.net.SocketAddress;
      import java.util.logging.Level;
      import java.util.logging.Logger;
      import java.util.zip.GZIPInputStream;
      import java.util.zip.GZIPOutputStream;
      public class MyClient {
        private final static Logger logger = Logger.getLogger(MyClient.class.getName());
        public static void main(String[] args) throws Exception {
          for (int i = 0; i < 10; i++) {
            Socket socket = null;
            GZIPOutputStream gzipos = null;
            ObjectOutputStream oos = null;
            GZIPInputStream gzipis = null;
            ObjectInputStream ois = null;
            try {
              socket = new Socket();
              SocketAddress socketAddress = new InetSocketAddress("localhost", 10000);
              socket.connect(socketAddress, 10 * 1000);
              socket.setSoTimeout(10 * 1000);
              gzipos = new GZIPOutputStream(socket.getOutputStream());
              oos = new ObjectOutputStream(gzipos);
              User user = new User("user_" + i, "password_" + i);
              oos.writeObject(user);
              oos.flush();
              gzipos.finish();
              gzipis = new GZIPInputStream(socket.getInputStream());
              ois = new ObjectInputStream(gzipis);
              Object obj = ois.readObject();
              if (obj != null) {
                user = (User)obj;
                System.out.println("user: " + user.getName() + "/" + user.getPassword());
              }
            } catch(IOException ex) {
              logger.log(Level.SEVERE, null, ex);
            } finally {
              try {
                ois.close();
              } catch(Exception ex) {}
              try {
                oos.close();
              } catch(Exception ex) {}
              try {
                socket.close();
              } catch(Exception ex) {}
            }
          }
        }
      }
      
      

      最后測試上面的代碼,首先運行Server類,然后運行Client類,就可以分別在Server端和Client端控制臺看到接收到的User對象實例了。

      更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java Socket編程技巧總結(jié)》、《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》和《Java緩存操作技巧匯總》

      希望本文所述對大家java程序設(shè)計有所幫助。


      本文標(biāo)題:JavaSocket實現(xiàn)傳輸壓縮對象的方法示例
      當(dāng)前地址:http://www.ef60e0e.cn/article/pjjjjd.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        马鞍山市| 巴南区| 新密市| 康乐县| 耒阳市| 抚顺市| 伊宁县| 横峰县| 吉木萨尔县| 宝兴县| 滦平县| 东辽县| 红河县| 永寿县| 徐水县| 通州区| 郴州市| 方城县| 兴化市| 原平市| 盐池县| 安龙县| 白水县| 介休市| 鹤庆县| 自贡市| 甘孜县| 乐山市| 平谷区| 定安县| 蚌埠市| 东台市| 内乡县| 昌江| 绥芬河市| 东至县| 临安市| 布拖县| 平陆县| 伊宁市| 古交市|