java中Socket如何实现数据包传输的打包和解包?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中Socket如何实现数据包传输的打包和解包?相关的知识,希望对你有一定的参考价值。

请举例说明,谢谢了

参考技术A socket一般调用accept方法等待连接:
public class ServerThread extends Thread

ServicePanel servicePanel = null;
ServerSocket serverSocket = null;
Socket socket = null;

public ServerThread(ServicePanel servicePanel,ServerSocket serverSocket)

this.servicePanel = servicePanel;
this.serverSocket = serverSocket;


public void run()

while (true)
try
socket = serverSocket.accept();//等待连接
new ReciveFromClient(servicePanel,socket).start();
catch (IOException e)
// e.printStackTrace();
break;





至于收包,发包是以流的形式传送的:
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
一般包里面的内容也就是被我们封装在某个类中,这个类要实现序列化,即实现Serializable接口;
发送方法那些就要自己写了~本回答被提问者采纳

SSE/SSE2 指令的打包和解包数据?

【中文标题】SSE/SSE2 指令的打包和解包数据?【英文标题】:Packing and unpacking data for SSE/SSE2 instructions? 【发布时间】:2013-01-30 18:06:39 【问题描述】:

我正在尝试了解有关 SSE/SSE2 如何工作的更多信息:我知道 SSE/SSE2 使用大小为 128 位(16 字节)的 mmx 寄存器,并且通常这些寄存器有 4 个浮点单元,我可以在其中存储我的通过包装漂浮。在得到结果之前,我应该“解压它们”。

我的问题是:既然我是菜鸟,为什么要将这些值打包到 xmm 寄存器中,为什么要解压缩它们?这样做有什么好处?

【问题讨论】:

【参考方案1】:

您不必打包/解包它们。如果数字已经是正确的格式,您只需使用合适的移动指令将它们加载到寄存器或内存操作数中,以将内存内容用作加法、减法等的第二个操作数。

有时会发生的情况是,数据没有在计算中出现在正确的位置,无法到达需要去的地方,这就是各种打包和解包指令派上用场的地方。

例如,假设您正在对此进行一些 3D 图形数学运算

struct coord  float X, Y, Z, W; ;

但是为了提高计算效率,我们一次加载了四个这样的结构,X 来自一个寄存器中的所有四个,Y 来自另一个寄存器中的所有四个,等等。现在,在我们有了之后,对于例如,将所有 XYZW 值 [一次四个] 与变换矩阵相乘以缩放/旋转对象,我们需要将其存储为 X、Y、Z 和W 再次,这是通过将适当的元素“解包”回它们对应的XYZW 单个条目来完成的。

当然,如果您存储了四个数组 XYZW 值,而不是具有 coord 值的数组,我们可以将新值存储到它们各自的值中数组中的插槽而不打包/解包值。

【讨论】:

【参考方案2】:

因为这些寄存器是 SSE 指令的输入/输出。

【讨论】:

以上是关于java中Socket如何实现数据包传输的打包和解包?的主要内容,如果未能解决你的问题,请参考以下文章

什么是打包和解包以及扩展打包数据

SSE/SSE2 指令的打包和解包数据?

pak文件的打包和解包

如何使用 ctypes 打包和解包(结构 <-> str)

Perl Cryptology:使用打包和解包功能加密/解密 ASCII 字符

从R中的列表中打包和解包元素