我有一个序列化对象Message,要对它发送到远程主机上,如下代码
private void handler(){
try {
Message message = new Message();
message.setMessageId(this.userID+this.getId());
ObjectOutputStream outObject = new ObjectOutputStream(new FileOutputStream(this.userID+this.getId()));
outObject.writeObject(message);
outObject.flush();
outObject.close();
ObjectInputStream inObject = new ObjectInputStream(new FileInputStream(this.userID+this.getId()));
byte[]b = new byte[1024*1024*10];
int r = 0;
while((r = inObject.read(b, 0, 1024*1024*10))>-1){
byte[]bs = new byte[r];
System.arraycopy(b, 0, bs, 0, r); //发送对象(远程主机ID,序列化对象);
send("99999999",bs);
}
inObject.close();
} catch (IOException e) {
e.printStackTrace();
} }我要问的问题是:
上面代码中Message对象已经在内存中,为什么要把它写到文件中去,然后读进内存来,再发送对象,能不能直接把内存中的Message发送到远程主机,而不用“把它写到文件中去”和“读进内存来”这两步去掉,一句话,我想直接把Message发送到远程主机,有什么方法可以实现呢??请各位朋友赐教!!谢谢!!
private void handler(){
try {
Message message = new Message();
message.setMessageId(this.userID+this.getId());
ObjectOutputStream outObject = new ObjectOutputStream(new FileOutputStream(this.userID+this.getId()));
outObject.writeObject(message);
outObject.flush();
outObject.close();
ObjectInputStream inObject = new ObjectInputStream(new FileInputStream(this.userID+this.getId()));
byte[]b = new byte[1024*1024*10];
int r = 0;
while((r = inObject.read(b, 0, 1024*1024*10))>-1){
byte[]bs = new byte[r];
System.arraycopy(b, 0, bs, 0, r); //发送对象(远程主机ID,序列化对象);
send("99999999",bs);
}
inObject.close();
} catch (IOException e) {
e.printStackTrace();
} }我要问的问题是:
上面代码中Message对象已经在内存中,为什么要把它写到文件中去,然后读进内存来,再发送对象,能不能直接把内存中的Message发送到远程主机,而不用“把它写到文件中去”和“读进内存来”这两步去掉,一句话,我想直接把Message发送到远程主机,有什么方法可以实现呢??请各位朋友赐教!!谢谢!!
具体就是先写到一个ByteArrayOutputStream而不是File...
然后从ByteArrayOutputStream里取出内容(toByteArray()),创建一个ByteArrayInputStream,替换上面代码里的FileInputStream
如果用ByteArrayOutputStream的话,那Message对象怎么写到ByteArrayOutputStream中去了???
这个时候你的Message这个类需要实现一个可序列话接口Serializable就可以了直接传输对象了
你可以去试试,还不明白,留言
我有一个序列化对象Message.........
这么兄弟,看来是我问题没描述清楚,让你没看明白,真对不起啊!!!!
然后你就直接用
ObjectOutputStrem out = new ObjectOutputStream(socket.getOutputStrem());
out.writeObject(message);//直接传输对象过去就可以了
在接的一方使用
ObjectInputStream in = new ObjectInputStrem(socket.getInputStrem());
Message message = (Message)in.readObject();
这个样子就OK了.你可以试试,我已经测试过很多次了。