请问怎么才能用网络传输一个未实现serializable接口的JAVA基础类的对象?比如说传输一个Color对象,继承可以吗?谢谢!

解决方案 »

  1.   

    Color?java 可以变成 XML 的,好像是 XMLEncoder 和  XMLDecoder你参考这个看看 http://www.java2000.net/viewthread.jsp?tid=2497
      

  2.   

    就是一些图形的对象,比如说直线、矩形,它们本身没有实现Serializable接口,但是如果想在网络上传输这些对象该怎么办呢?
      

  3.   

    答:简单啊。方法之一:对“直线、矩形,它们本身没有实现Serializable接口”这引动类做一个十分轻度的简单包装,并实现Serializable接口就行了。如:
    public class MyLine extends java.awt.geom.Line2D implements Serializable
    {
     此处代码其实就是将Line2D的抽象方法实现一下而已。若,没有抽象方法,则什么都不用做。
    }
    其它方法还有不少。比如自己定义一个格式,在网络上传。(自己定义编码与反编码。用二进制或XML就看具体应用了)以上仅供你参考。
      

  4.   

    java 可以变成 XML 的,好像是 XMLEncoder 和  XMLDecoder 
      

  5.   

    这次继承后仍然抛出未实现串行化接口的异常,以前继承之后破坏了Line2D类的正常功能,不能使用。不太了解XML,把对象转成XML传输吗?
      

  6.   

    问:这次继承后仍然抛出未实现串行化接口的异常以前继承之后破坏了Line2D类的正常功能,不能使用” 
    答: 这怎么可能!我以前在写网络协同式矢量图形编辑器时,就是这样序列化的,并做了定制处理。你的代码是如何写的?
    我给你一个代码,请你参考(当然测试通过了)。当然具有Line2D的正常功能,同时又能正常序列化。import java.awt.geom.Line2D;
    import java.awt.geom.Point2D;
    import java.awt.geom.Rectangle2D;
    import java.io.*;public class MyLine extends Line2D implements Serializable
    {
      private Line2D.Double line=null;//双精度的两个点p1,p2的直线
      
    //(0,0)->(0,0)直线
      public MyLine()
      {
      line=new Double();
      }
      
    //( X1,  Y1)->(  X2,  Y2)直线
      public MyLine(double X1, double Y1, double X2, double Y2)
      {
      line=new Double( X1,  Y1,  X2,  Y2);
      }
      
    //(p1)->(p2)直线
      public MyLine(Point2D p1, Point2D p2) 
      {
      line=new Double( p1, p2);
      }
      
      
    @Override
    public Point2D getP1() {
    // TODO Auto-generated method stub
    return line.getP1();
    } @Override
    public Point2D getP2() {
    // TODO Auto-generated method stub
    return line.getP2();
    } @Override
    public double getX1() {
    // TODO Auto-generated method stub
    return line.getX1();
    } @Override
    public double getX2() {
    // TODO Auto-generated method stub
    return line.getX2();
    } @Override
    public double getY1() {
    // TODO Auto-generated method stub
    return line.getY1();
    } @Override
    public double getY2() {
    // TODO Auto-generated method stub
    return line.getY2();
    } @Override
    public void setLine(double x1, double y1, double x2, double y2) {
    // TODO Auto-generated method stub
           line.setLine(x1, y1, x2, y2);
    } public Rectangle2D getBounds2D() {
    // TODO Auto-generated method stub
    return line.getBounds2D();
    }
     
    }import java.io.*;
    public class TestObj {
    public static void main(String[] args) throws Exception {
    ObjectOutputStream oos = new ObjectOutputStream(
    new FileOutputStream("c:/t.ser"));
            MyLine line=new MyLine(1,1,2,2);//一条(1,1)->(2,2)的直线
    oos.writeObject(line);//序列化写到文件中
    oos.close();
    }}
    另外:若要自己用XML(或其它任何形式如:XDR或干脆二进制0、1并自己压缩等),都是自己定义了自己的一套序列化编码而已。若要方便,倒不如直接利用JAVA的序列化机制。
    以上仅供你参考
      

  7.   

    十分感谢您的热心帮助,刚才用您提供的代码试了一下,还是抛出异常,以下是异常信息:Exception in thread "main" java.io.NotSerializableException: java.awt.geom.Line2D$Double
    at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
    at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
    at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
    at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    at java.io.ObjectOutputStream.writeObject(Unknown Source)
    at TestObj.main(TestObj.java:7)
      

  8.   

    答:怎么可能呢
    代码在我的机器上运行很正常啊。(MyEclipse5.5+JDK1.6的JRE)。
    而且:java.awt.geom.Line2D$Double的定义源代码就在JDK的SRC中,是如下定义的:
    public abstract class Line2D implements Shape, Cloneable {
    ...
      //内部类的定义
      public static class Double extends Line2D implements Serializable {
    ...
    }
      

  9.   

    我用的是Eclipse3.3+JDK1.6,不过还是抛出异常
      

  10.   

    sun的遗留代码害死淫啊.....为什么java.awt.geom.Line2D里面的Double类都实现了序列化接口了  java.awt.geom.Line2D不去实现呢....真是....不能因为它是抽象类就75它嘛...
      

  11.   


    解决了,我没把Eclipse里的JRE路径改成1.6,还是用的1.5,不过怎么1.5不行呢?十分感谢您的帮助