最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Socket實現(xiàn)傳輸壓縮對象的方法示例

 更新時間:2017年06月22日 08:58:04   作者:kongxx  
這篇文章主要介紹了Java Socket實現(xiàn)傳輸壓縮對象的方法,結(jié)合具體實例形式分析了java socket針對數(shù)據(jù)的壓縮、傳輸、接收、解壓縮等操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下

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

前面文章《Java Socket實現(xiàn)的傳輸對象功能示例》說到了用Java Socket來傳輸對象,但是在有些情況下比如網(wǎng)絡(luò)環(huán)境不好或者對象比較大的情況下需要把數(shù)據(jù)對象進行壓縮然后在傳輸,此時就需要壓縮這些對象流,此時就可以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è)計有所幫助。

相關(guān)文章

  • Spring?Retry重試框架的使用講解

    Spring?Retry重試框架的使用講解

    重試的使用場景比較多,比如調(diào)用遠程服務時,由于網(wǎng)絡(luò)或者服務端響應慢導致調(diào)用超時,此時可以多重試幾次。用定時任務也可以實現(xiàn)重試的效果,但比較麻煩,用Spring?Retry的話一個注解搞定所有,感興趣的可以了解一下
    2022-10-10
  • Java Unsafe 類的講解

    Java Unsafe 類的講解

    這篇文章主要給大家分享了 Java Unsafe 類的講解,文章圍繞Unsafe 類的相關(guān)資料展開詳細內(nèi)容,具有一定的參考價值需要的朋友可以參考一下
    2021-11-11
  • JavaMail實現(xiàn)簡單郵件發(fā)送

    JavaMail實現(xiàn)簡單郵件發(fā)送

    這篇文章主要為大家詳細介紹了JavaMail實現(xiàn)簡單郵件發(fā)送,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • java模擬實現(xiàn)銀行ATM機操作

    java模擬實現(xiàn)銀行ATM機操作

    這篇文章主要為大家詳細介紹了java模擬實現(xiàn)銀行ATM機操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • SpringBoot項目開發(fā)中常用的依賴

    SpringBoot項目開發(fā)中常用的依賴

    這篇文章主要介紹了SpringBoot項目開發(fā)中常用的依賴詳解,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • idea maven編譯報錯Java heap space的解決方法

    idea maven編譯報錯Java heap space的解決方法

    這篇文章主要為大家詳細介紹了idea maven編譯報錯Java heap space的相關(guān)解決方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-04-04
  • SpringCloud學習筆記之SpringCloud搭建父工程的過程圖解

    SpringCloud學習筆記之SpringCloud搭建父工程的過程圖解

    SpringCloud是分布式微服務架構(gòu)的一站式解決方案,十多種微服務架構(gòu)落地技術(shù)的集合體,俗稱微服務全家桶,這篇文章主要介紹了SpringCloud學習筆記(一)搭建父工程,需要的朋友可以參考下
    2021-10-10
  • 一篇文章帶你入門Java方法詳解

    一篇文章帶你入門Java方法詳解

    這篇文章主要介紹了簡單了解Java方法的定義和使用實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-08-08
  • Java中ArrayList和LinkedList之間的區(qū)別_動力節(jié)點Java學院整理

    Java中ArrayList和LinkedList之間的區(qū)別_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了Java中ArrayList和LinkedList之間的區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java中checkbox實現(xiàn)跨頁多選的方法

    Java中checkbox實現(xiàn)跨頁多選的方法

    最近做了一個項目其中遇到這樣的需求,要實現(xiàn)checkbox跨頁多選功能,經(jīng)過小編整理,順利解決,今天小編給大家分享Java中checkbox實現(xiàn)跨頁多選的方法,需要的的朋友參考下
    2017-01-01

最新評論

天门市| 犍为县| 宁远县| 油尖旺区| 兰考县| 神木县| 洛扎县| 泾阳县| 小金县| 中方县| 武宁县| 焉耆| 含山县| 景德镇市| 特克斯县| 砚山县| 衡东县| 镇江市| 望江县| 张北县| 明溪县| 崇仁县| 开阳县| 西吉县| 涞水县| 德州市| 尉犁县| 上林县| 白银市| 武威市| 广宁县| 雷州市| 云梦县| 建水县| 柞水县| 瑞金市| 崇文区| 台南市| 盐亭县| 嵩明县| 东乡|