把object数组转换为内存流的问题?

zuotaoqin2 2009-12-28 02:52:34
c#可以这样写,java中怎么写???

//【客户端】
//这是你的object数组
Object[] objArray = new Object[10];
//内存流(需要引用 System.IO)
MemoryStream ms=new MemoryStream();
//序列化(需要引用 System.Runtime.Serialization.Formatters.Binary)
BinaryFormatter bf = new BinaryFormatter();
//将数据保存到内存流
bf.Serialize(ms, objArray);

//【服务端】
MemoryStream msGet;//你通过自己的方法获取到内存流
BinaryFormatter bfServer = new BinaryFormatter();
//反序列化,得到数据
Object[] getObjectArray = (Object[])bf.Deserialize(msGet);

c#可以这样写,java中怎么写???

...全文
401 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
捏造的信仰 2009-12-30
  • 打赏
  • 举报
回复
MemoryStream 是什么接口?这就等于要求服务器端和客户端使用同样的语言了。如今的网络应用都讲究使用独立协议,不要绑定在语言或系统上。
crazylaa 2009-12-30
  • 打赏
  • 举报
回复
用XML封装数据吧。数据交换一般都这么做。
Brodie 2009-12-29
  • 打赏
  • 举报
回复
呵呵,通信的话,考虑JSON或XML吧,就算Java的RMI也很少会把对象序列化后传输,得多浪费性能啊。
zuotaoqin2 2009-12-29
  • 打赏
  • 举报
回复
我回复的时候还没看到五楼的贴,序列化弄明白了,现在我java的序列化,通过socket发送给C#,C#反序列化不了,郁闷
zuotaoqin2 2009-12-29
  • 打赏
  • 举报
回复
刚开始用
crazylaa 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ouyangyh 的回复:]
LZ用Java多久了,
把 ObjectOutputStream再封装成一个 ByteArrayOutputStream就可以了
[/Quote]
.
ouyangyh 2009-12-28
  • 打赏
  • 举报
回复
LZ用Java多久了,
把 ObjectOutputStream再封装成一个 ByteArrayOutputStream就可以了
墨水鱼 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zuotaoqin2 的回复:]
不好意思,上面问题可能没写明白,现发段C#代码,类似如这样功能,将一个集合转成一个byte[]数组,java中怎么写???
[/Quote]

这个代码适用5楼的例子
realreachard 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cangyingzhijia 的回复:]
要实现在序列化必须implements Serializable
总之没有c#中那么方便,c#中5行代码能搞定可能java中需要10行
[/Quote]

C# -- 需要敲两下键盘
java -- 需要四下
遵循引用的逻辑:
C# 确实比java简单一半.

有聊啊!
nickycheng 2009-12-28
  • 打赏
  • 举报
回复
5楼写的很详细了。麻烦你先看看好8?
zuotaoqin2 2009-12-28
  • 打赏
  • 举报
回复
没明白,朋友们,帮帮忙!!!
因为socket传送的时候只能传byte[],所以要把object[]转成byte[],才能发送.
SambaGao 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 nickycheng 的回复:]
Object[] objArray = new Object[10];
ObjectOutputStream oos = null;
OutputStream os = null;
try {
  os = new FileOutputStream("c:\\xxxx"); // 输出流你可以随便定义了
  oos = new ObjectOutputStream(os);
  oos.writeObject(objArray);
} catch (Exception e) {
  throw e;
} finally {
  IOUtils.closeQuietly(oos);
  IOUtils.closeQuietly(os);
}
[/Quote]

路过
zuotaoqin2 2009-12-28
  • 打赏
  • 举报
回复
不好意思,上面问题可能没写明白,现发段C#代码,类似如这样功能,将一个集合转成一个byte[]数组,java中怎么写???

/// <summary>
/// string集合转成byte[]数组
/// </summary>
/// <returns>序列化后的字节数组</returns>
private byte[] SerializeOnlineList()
{
StringCollection onlineList = new StringCollection();
onlineList.Add("张三");
onlineList.Add("李四");
IFormatter format = new BinaryFormatter();
MemoryStream stream = new MemoryStream();//创建其支持存储区为内存的流
format.Serialize(stream, onlineList);
byte[] ret = stream.ToArray();
stream.Close();
return ret;
}
墨水鱼 2009-12-28
  • 打赏
  • 举报
回复

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Arrays;

public class Test2 {

public static void main(String[] args) throws IOException {
Serializable obj = "abc";
byte[] array = toByteArray(obj);
System.out.println("Array: "+Arrays.toString(array));
obj = toObject(array);
System.out.println(obj);
}

/**byte[]转对象*/
public static Serializable toObject(byte[] bytes) throws IOException {
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes));
Serializable ser = null;
try {
ser = (Serializable) in.readObject();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return ser;
}

/**对象转byte[]*/
public static byte[] toByteArray(Serializable object) throws IOException {
ByteArrayOutputStream buf = new ByteArrayOutputStream();
ObjectOutputStream o = new ObjectOutputStream(buf);
o.writeObject(object);
byte[] bytes = buf.toByteArray();
return bytes;
}
}


两个方法,顺带一个小例子。
注:java中要变成byte[]需要实现Serializable接口才行。
nickycheng 2009-12-28
  • 打赏
  • 举报
回复
Object[] objArray = new Object[10];
ObjectOutputStream oos = null;
OutputStream os = null;
try {
os = new FileOutputStream("c:\\xxxx"); // 输出流你可以随便定义了
oos = new ObjectOutputStream(os);
oos.writeObject(objArray);
} catch (Exception e) {
throw e;
} finally {
IOUtils.closeQuietly(oos);
IOUtils.closeQuietly(os);
}
zuotaoqin2 2009-12-28
  • 打赏
  • 举报
回复
朋友们,有没有例子看下
我是想把object数组变成字节数组,然后用socket传送字节数组
苍蝇①号 2009-12-28
  • 打赏
  • 举报
回复
要实现在序列化必须implements Serializable
总之没有c#中那么方便,c#中5行代码能搞定可能java中需要10行
healer_kx 2009-12-28
  • 打赏
  • 举报
回复
看Java序列化。。。 。。。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧