Java Socket中怎样传输压缩对象
发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,这篇文章将为大家详细讲解有关Java Socket中怎样传输压缩对象,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。上一篇文章说到了用Java Sock
千家信息网最后更新 2024年11月27日Java Socket中怎样传输压缩对象
这篇文章将为大家详细讲解有关Java Socket中怎样传输压缩对象,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
上一篇文章说到了用Java Socket来传输对象,但是在有些情况下比如网络环境不好或者对象比较大的情况下需要把数据对象进行压缩然后在传输,此时就需要压缩这些对象流,此时就可以GZIPInputStream和GZIPOutputStream来处理一下socket的InputStream和OutputStream。
仍然需要一个实现了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); } try { oos.close(); } catch (IOException e) { } try { ois.close(); } catch (IOException e) { } try { socket.close(); } catch (IOException e) { } } } }
测试上面的代码,首先运行Server类,然后运行Client类,就可以分别在Server端和Client端控制台看到接收到的User对象实例了。
关于Java Socket中怎样传输压缩对象就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
对象
传输
被包
装成
篇文章
内容
情况
文章
更多
知识
包装
运行
不错
不好
代码
实例
接口
控制台
数据
是在
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
欧阳秋叶nova屏幕数据库
服务器需要什么原材料
软件开发地图显示
用python写网络安全
静安区上门软件开发报价表
北京网络安全鉴定机构
数据库表字段唯一索引
qq数据库在线查询软件
软件开发的简历表
数据库的审计策略合理配置
北大多少数据库
南京好的软件开发资费
覆盖数据库
山东网络技术大赛资格赛
内蒙古网络安全优势
服务器网卡自动禁用
app的数据库技术
显示器调节软件开发
中新科技是互联网公司吗
酷安网络安全吗
嘉定区软件开发优势
专升本有网络安全专业吗
计算机与网络技术基础简答
云服务器的虚拟机登录管理
2020年网络安全条幅
姜堰区网络技术联系方式
服务器 安全审计设备
数据库常见的性能问题
dubbo怎么管理服务器
网络安全执法是干嘛的