Java对象保存

Java对象保存,java,performance,oop,serialization,binary,Java,Performance,Oop,Serialization,Binary,我正在努力挽救相当大的班级 注: 我使用Java的ObjectOutputStream和ObjectInputStream进行保存和加载,其中在方法1 Integer[]中保存的是对象,在方法2中保存的是OutputStream/s缓冲区(字节[]) 我最想要的是: 运行时快速保存和加载 容易让别人理解 添加或从类中删除后易于编辑 在以下两种方法中,保存java类型类的最佳方法是什么 方法1:(IOstreamSerialization是以下两种使用方法的接口) 方法2:(IoBinary是

我正在努力挽救相当大的班级

注:

我使用Java的ObjectOutputStream和ObjectInputStream进行保存和加载,其中在方法1 Integer[]中保存的是对象,在方法2中保存的是OutputStream/s缓冲区(字节[])

我最想要的是:

  • 运行时快速保存和加载
  • 容易让别人理解
  • 添加或从类中删除后易于编辑
在以下两种方法中,保存java类型类的最佳方法是什么

方法1:(IOstreamSerialization是以下两种使用方法的接口)

方法2:(IoBinary是下面两个使用方法的接口,其中泛型类型arg是要保存的内容)

公共最终类项实现IoBinary{
私有int-id;
私人整数金额;
公共项目(整数id、整数金额){
超级();
this.id=id;
这个。金额=金额;
}
@凌驾
公共void loadBinary(整数[]二进制){
id=二进制[0];
金额=二进制[1];
}
@凌驾
公共整数[]saveBinary(){
返回新整数[]{id,amount};
}
}

实现序列化(解决方案1)是大型类的最佳方式,在快速处理和检索方面

在性能方面:“不要猜测,测量!”

但是,首先让它运行。如果速度够快,就停在那里。如果没有配置文件,则查找瓶颈

您最想要的是:

  • 工作正常的代码(即已测试)
  • 容易让别人理解
  • 添加或从类中删除后易于编辑
  • 运行时快速保存和加载
  • 第2点。三,。与可维护性相关的问题比速度更重要。为什么?如果代码工作正常,并且易于维护和更改,那么一旦发现瓶颈,也可以更轻松地更改代码以加快运行速度

    另一方面,如果你有很难理解和修改的快速代码,它很快就会开始腐烂和腐烂

    public final class Item implements IoStreamSerialization {
    
        private int id;
    
        private int amount;
    
    
        public Item(int id, int amount) {
            super();
            this.id = id;
            this.amount = amount;
        }
    
        @Override 
        public void loadInputStream(InputStream is) {
            id = is.readUnsignedByte();
            amount = is.readInt();
        }
    
        @Override 
        public OutputStream saveOutputStream() {
            OutputStream os = new OutputStream(2);
            os.writeByte(id);
            os.writeInt(amount);
            return os;
        }
    
    }
    
    public final class Item implements IoBinary<Integer[]> {
    
        private int id;
    
        private int amount;
    
    
        public Item(int id, int amount) {
            super();
            this.id = id;
            this.amount = amount;
        }
    
        @Override 
        public void loadBinary(Integer[] binary) {
            id = binary[0];
            amount = binary[1];
        }
    
        @Override 
        public Integer[] saveBinary() {
            return new Integer[] { id, amount };
        }
    
    }