java中的ObjectOutputStream 100
我在写一个从网络传输数据的程序用的是ServerSocket和Socket类socket中有方法getInputStream和getOutputStream我在服务端和客...
我在写一个从网络传输数据的程序
用的是 ServerSocket 和 Socket 类
socket中有方法 getInputStream 和getOutputStream
我在服务端和客户端都构造 ObjectInputstream和ObjectOutputStream以上面两个方法的返回值作为参数
然后开始写数据读数据 结果发现总是出错
好像是 ObjectInputstream 读取的时候总是需要一个标记?
我用ObjectInputstream第一个读取到的Object一定是一个不知道什么东西(我用System.out.println()数出来的 只能看到是空白)
如果ObjectInputStream是读取本机上的文件 好像也要先要求该文件是被ObjectOutputStream输出生成的 不然的话读取会出错
求高手给点解决的方法... 展开
用的是 ServerSocket 和 Socket 类
socket中有方法 getInputStream 和getOutputStream
我在服务端和客户端都构造 ObjectInputstream和ObjectOutputStream以上面两个方法的返回值作为参数
然后开始写数据读数据 结果发现总是出错
好像是 ObjectInputstream 读取的时候总是需要一个标记?
我用ObjectInputstream第一个读取到的Object一定是一个不知道什么东西(我用System.out.println()数出来的 只能看到是空白)
如果ObjectInputStream是读取本机上的文件 好像也要先要求该文件是被ObjectOutputStream输出生成的 不然的话读取会出错
求高手给点解决的方法... 展开
2个回答
展开全部
猜想你的数据模型没有序列化,使用这种方式读写的数据模型必须实现 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();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询