java中的ObjectOutputStream 100

我在写一个从网络传输数据的程序用的是ServerSocket和Socket类socket中有方法getInputStream和getOutputStream我在服务端和客... 我在写一个从网络传输数据的程序
用的是 ServerSocket 和 Socket 类
socket中有方法 getInputStream 和getOutputStream
我在服务端和客户端都构造 ObjectInputstream和ObjectOutputStream以上面两个方法的返回值作为参数
然后开始写数据读数据 结果发现总是出错

好像是 ObjectInputstream 读取的时候总是需要一个标记?
我用ObjectInputstream第一个读取到的Object一定是一个不知道什么东西(我用System.out.println()数出来的 只能看到是空白)

如果ObjectInputStream是读取本机上的文件 好像也要先要求该文件是被ObjectOutputStream输出生成的 不然的话读取会出错

求高手给点解决的方法...
展开
 我来答
修怀芹26
2013-05-19 · TA获得超过1208个赞
知道小有建树答主
回答量:695
采纳率:75%
帮助的人:453万
展开全部

猜想你的数据模型没有序列化,使用这种方式读写的数据模型必须实现 Serializable 这个接口。以下代码我已经测试过了,没有问题,写网络数据也同样操作即可。

Forecast forecast = parseXML(getForeCast(), Forecast.class);
File f = new File("c:/xxx.yyy");
OutputStream out = new FileOutputStream(f);
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(forecast.getWeathers().size());
for (Weather weather : forecast.getWeathers()) {
    oos.writeObject(weather);
}
oos.flush();
oos.close();
InputStream in = new FileInputStream(f);
ObjectInputStream ois = new ObjectInputStream(in);
try {
    int n= (Integer)ois.readObject();
    for(int i=0;i<n;i++) {
        Weather weather = (Weather) ois.readObject();
        System.out.println("天气:" + weather);
    }
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

更多追问追答
追问
我输入输出的都是String怎么没有序列化?
追答

读写String对象也是一样的,我刚才也顺便测试了一下,也没有问题。应该是你代码逻辑问题。你可以贴出来看看。

Forecast forecast = parseXML(getForeCast(), Forecast.class);
File f = new File("c:/xxx.yyy");
OutputStream out = new FileOutputStream(f);
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(forecast.getWeathers().size());//测试写入整数
for (Weather weather : forecast.getWeathers()) {
    oos.writeObject(weather);//测试写入对象
    oos.writeObject(weather.toString().replace(" ", ""));//测试写入字符串
}
oos.flush();
oos.close();
InputStream in = new FileInputStream(f);
ObjectInputStream ois = new ObjectInputStream(in);
try {
    int n= (Integer)ois.readObject();//按照写入时的顺序,这里先读取一个整数
    for(int i=0;i<n;i++) {
        Weather weather = (Weather) ois.readObject();//读取一个对象
        System.out.println(weather);
        String str =(String) ois.readObject();//读取一个串
        System.out.println(str);
    }
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}
水冰天之痕
2013-05-19 · TA获得超过716个赞
知道小有建树答主
回答量:1254
采纳率:50%
帮助的人:1165万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式