首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

怎么通过数据包输送对象 -java

2012-10-07 
如何通过数据包输送对象 -java????? e.printStackTrace ()??? }??? catch (IOException e)??? { e.printS

如何通过数据包输送对象 -java
????? e.printStackTrace ();
??? }
??? catch (IOException e)
??? { e.printStackTrace(); }
? }
}


以下代码清单说明了如何在 Receiver 类中实现 receive 方法。recvObjFrom 方法是供接收者接收对象的。您应在您的代码中包含此方法以接收运行时对象。

import java.io.*;
import java.net.*;

public class Receiver
{
? public Object recvObjFrom()
? {
??? try
??? {
????? byte[] recvBuf = new byte[5000];
????? DatagramPacket packet = new DatagramPacket(recvBuf,
???????????????????????????????????????????????? recvBuf.length);

????? dSock.receive(packet);
????? int byteCount = packet.getLength();

????? ByteArrayInputStream byteStream = new
????????????????????????????????? ByteArrayInputStream(recvBuf);

????? ObjectInputStream is = new
?????????? ObjectInputStream(new BufferedInputStream(byteStream));
????? Object o = is.readObject();
????? is.close();
????? return(o);
??? }
??? catch (IOException e)
??? {
????? System.err.println("Exception: " + e);
????? e.printStackTrace ();
??? }
??? catch (ClassNotFoundException e)
??? { e.printStackTrace(); }

??? return(null);
? }
}


人们可能会担心字节数组的大小 -- 因为当您构造 ByteArrayOutputStream 或 ByteArrayInputStream 时,您必须指定数组的大小。既然您不知道运行时对象的大小,您就很难指定其大小。运行时对象的大小通常是不可预知的。幸运的是,Java 的 ByteArrayInputStream 和 ByteArrayOutputStream 类可根据需要自动扩展其大小。

小结
通过利用 Java 的内建序列化代码,我阐述了一种使用数据报包传输对象的方法。正如您所见,技巧就是使用字节数组流将对象流化为字节数组。

热点排行