站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题java中关于对象传输的一个问题

java中关于对象传输的一个问题

摘要: java中关于对象传输的一个问题


自定义了一个对象LE,由于LE太大,从服务器端传输到客户端时报错:java.lang.StackOverflowError。服务器端的输出流用的是
ObjectOutputStream out =
new ObjectOutputStream(
socket.getOutputStream());
客户端的输入流用的是
ObjectInputStream in =
new ObjectInputStream(
socket.getInputStream());
请问用什么方法可以解决问题?


分段传输,先把大对象拆成几个小对象,传输接收完毕再组合成大对象。
拆分与组合的规则可以自己定制。达到功能即可。


郁闷的是该对象中的最小对象都没法传输。
我想了2种方案:
1)将对象指定到内存数组中,再把内存数组分批传输,可是不知道怎么实现;
2)将对象存到文件中,把文件传过去,再从文件中复原对象。
大家能不能给点建议。


我很奇怪的是怎么会stack溢出?
不过既然是这样,可以用你自己说的这2种方法,都可以。
第1种方法的例子是这样的:
ByteArrayOutputStream bout=new ByteArrayOutputStream();
ObjectOutputStream out=new ObjectOutputStream(bout);
out.writeObject("123");
byte[] arr=bout.toByteArray();

ObjectInputStream bin=new ObjectInputStream(new ByteArrayInputStream(arr));
String s=(String)bin.readObject();

System.out.println(s);



我用方法1试验了一下。
错误一样:java.lang.StackOverflowError,无法从对象流写入内存。
是不是对象流限定了对象的大小??



有没有什么方法可以直接找到对象在内存中的位置??


方法(1)失败,我估计方法(2)也够呛
用方法(3)吧:
把LE定义成javabean,自己把LE对象的数据成员取出来,按自己定义的协议传。传过去之后,按javabean来恢复成对象


方法2确实不行。
所有的试验在数据量小的时候都可以,但数据量稍大就出现上述问题。
报错特别多,但没有是我程序本身的,主要是objectOutputStream和objectInputStream自身的。
感谢这位兄弟不厌其烦地赐教,明天我会试一下方法3。


问题解决了。
我把LE中的一个数据成员屏蔽掉就没问题了。
不过我不知道为什么。。
谢谢帮忙。。


因为死循环了


↑返回目录
前一篇: EJB QL怎么写一条查询语句
后一篇: 关于文件上传的苦恼!!!!(三天没解决的问题,救急)