当前位置: 首页 > 知识库问答 >
问题:

如何在java中序列化和反序列化kdtree

方高丽
2023-03-14

我有一个kdtree,其节点由以下字段组成:公共静态类节点实现可序列化{

    public int discriminator;
    public double value; 

    public Node leftChild;
    public Node rightChild;
    public DataPoint object;
    }

其中DataPoint定义:

公共静态类DataPoint实现可序列化{公共可比X;公共可比Y;公共可比Z;

     public double latitude;
     public double longitude;

     public ArrayList<String> text = new ArrayList<String>(); 
     }

我想序列化树,存储在文件中并在回答范围查询时反序列化。我对这个概念od序列化的理解并不好。从我收集的任何内容中,我编写了以下函数,但不起作用。有人能帮忙吗?

 public static void serialize(final OutputStream out, kdtrees.Node node) throws IOException
 {
        if( node == null ) 
        {
            //out.write( "()".getBytes() );
            //write to an output leaf file
            out.write("#".getBytes());

        } 
        else 
        {
            //out.write( "(".getBytes() );
            ((ObjectOutputStream) out).writeObject(node);
            serialize( out, node.leftChild );
            serialize( out, node.rightChild );
            //out.write( ")".getBytes( ) );
        }
    }


 public static kdtrees.Node deserialize(final ObjectInputStream reader) throws IOException, ClassNotFoundException 
 {

                  StringTokenizer st = new StringTokenizer(reader.readObject().toString()); 
                  String curToken = st.nextToken().toString();
                  while(st.hasMoreTokens())
                  { 
                      if(curToken.equals("#".trim()))
                          return null;


                      kdtrees.Node e = (kdtrees.Node)reader.readObject();

                       e.leftChild = deserialize(reader);
                       e.rightChild = deserialize(reader);

                    return e;

                  }
               return null;   


    } 

共有1个答案

公良凯
2023-03-14

将任意OutputStream强制转换为ObjectOutputStream只会失败。相反,使用new ObjectOutputStream(outputStream)围绕OutputStream创建包装器,对于InputStreams也是如此。

 类似资料:
  • 主要内容:1 Java序列化和反序列化,2 Java序列化的优点,3 java.io.Serializable接口,4 Java ObjectOutputStream,5 Java ObjectInputStream,6 Java序列化的例子,7 Java反序列化的例子1 Java序列化和反序列化 Java中的序列化是一种将对象状态写入字节流的机制。它主要用于Hibernate,RMI,JPA,EJB和JMS技术。 序列化的反向操作称为反序列化,其中字节流被转换为对象。序列化和反序列化过程与平台

  • 问题内容: 我已经开始在我的第一个android应用程序上进行工作,并且具有处理多层图像的应用程序。我能够将项目文件的平面版本导出为PNG,但我希望能够保存分层图像以供以后编辑(包括应用于某些层的任何选项,例如基于文本的层)。 无论如何,我已经确保需要写入文件的类是“可序列化的”,但是由于android.graphics.Bitmap不可序列化这一事实而遇到了一些障碍。以下代码实质上将位图作为PN

  • 我有两个Java应用程序-和。需要通过套接字发送到类的Slave实例。 Master创建这个类的实例,序列化它并通过套接字发送到Slave。 在上,一切正常。没有异常。接收数据并尝试对其进行反序列化。引发以下异常 JAVAlang.ClassNotFoundException 在类中没有错误,因为如果我用优化函数=null创建它,那么就会毫无问题地反序列化它。我试图将实例序列化到中的文件中,然后也

  • 如题目所述,想请教一下大佬们在Java中序列化与反序列化的意义是什么,如何理解Java的序列化和反序列化?

  • 问题内容: 我尝试过在Java和Android之间实现跨平台序列化。我使用了Serializable,并将我的代码在Android中与台式机Java放在同一软件包中。 来源:java-desktop序列化 资料来源:Android-反序列化 学生是一类,实现了Serializable。在桌面上,我将学生实例序列化为“ thestudent.dat”。我将此文件放在Android设备上的SD卡上,并

  • 上一小节我们学习了 Java 的输入输出流,有了这些前置知识点,我们就可以学习 Java 的序列化了。本小节将介绍什么是序列化、什么是反序列化、序列化有什么作用,Serializable 接口以及 Externalizable 接口,常用序列化工具介绍等内容。 1. 序列化与反序列化 序列化在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式,以留待后续在相同或另一台计算机环境中,能