JAVA SOCKET传送数据

我现在就是想呢.用一个线程只发送数据.然后主线程只管接收数据.来达到心跳检测和数据处理的功能.而传递的数据都为我序列化的对象.第一种:现在问题是我序列化的对象有很多种.如... 我现在就是想呢.用一个线程只发送数据.然后主线程只管接收数据.来达到心跳检测和数据处理的功能.而传递的数据都为我序列化的对象.
第一种:现在问题是我序列化的对象有很多种.如果直接接收序列化的对象.然后利用重载.是不是能自己识别出来是哪个呢?
第二种:如果我把所有可能用到的对象都序列化.然后全部发送过去.利用一个量来判断是进行那种操作.因为涉及到的太多了.对不需要的对象不初始化的话传送的时候这些没有初始化的对象会不会也占用一部分数据流呢?造成每次传送的数据过大.出现一些不可知的问题呢?
如果我new一个ObjectInputStream(socket.getSocket().getInputStream());来接收数据.然后用in.readObject();来等待一个序列化的对象传入.这样是不是就是把这个对象已经反序列化了?然后使用run(in.readObject());的重载.是不是就能自动分辨被反序列化的对象了?然后调用相应的重载了?(如果我序列化的是一个类的话.是不是我这种方法可行?而且传输过来的类里面的对象的值都可以保存.是么?)
展开
 我来答
力锦曦QC
2011-12-10 · TA获得超过4594个赞
知道大有可为答主
回答量:7387
采纳率:0%
帮助的人:2924万
展开全部
可以这样哈,数据结构:
|--时间(50个字节)--||--上午数据长度(固定用8个字节)--||--上午数据--||--中午数据长度--||--中午数据--||--下午数据长度--||--下午数据--|

然后读取的时候先读50个字节的内容,然后把它转为字符串得到的就是时间,然后读8个字节的内容,把读到的内容转为数字就是上午的数据的总长度,假如是n,则继续读n个字节内容,转为字符串就是上午数据,然后继续读8个字节,转为数字……
以上只是一种数据结构,还可以有很多,你可以根据自己的实际情况来决定各个字节的长度。

再说写入的情况,把所有的字符串转化成固定长度的byte数组然后直接写入就行了。
byte[] time=new byte[10];
String stime="2009-10-31 12:00:00";
byte[] temp=stime.getByte();
for(int i=0;i<temp.length;i++){
time[i]=temp[i];
}
然后写入time,等到把所有数据写入完毕统一刷新
追问
这样是不是复杂化了呢?如果我new一个ObjectInputStream(socket.getSocket().getInputStream());来接收数据.然后用in.readObject();来等待一个序列化的对象传入.这样是不是就是把这个对象已经反序列化了?然后使用run(in.readObject());的重载.是不是就能自动分辨被反序列化的对象了?然后调用相应的重载了?(如果我序列化的是一个类的话.是不是我这种方法可行?而且传输过来的类里面的对象的值都可以保存.是么?)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式