Java对象保存

标签 java performance oop serialization binary

我正在尝试保存相当大的类。

注意:

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

我最想要的:

  • 运行时快速保存和加载
  • 易于他人理解
  • 在类(class)中添加或删除后易于编辑

对于我来说,保存 java 类型类的最佳方法是什么以下两种:

方法1:(IoStreamSerializaion是一个接口(interface),具有以下两个使用的方法)

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;
    }

}

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

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 };
    }

}

最佳答案

说到性能:“不要猜测,要测量!”

但是,首先要让它运行。如果速度足够快,就停在那里。如果没有分析并找到瓶颈。

你最想要的是什么:

  1. 代码运行正常(即经过测试)
  2. 易于他人理解
  3. 在类(class)中添加或删除后易于编辑
  4. ...
  5. ...
  6. 运行时快速保存和加载

第 2 点和第 3 点与可维护性相关,比速度更重要。为什么?如果您的代码工作正常并且易于维护和更改,那么一旦发现瓶颈,也可以更轻松地更改它以使其运行得更快。

另一方面,如果您的代码速度很快,但难以理解和更改,那么它很快就会开始腐烂和溃烂。

关于Java对象保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52454156/

相关文章:

java - Spring Batch 是否具有跟踪已处理行的功能?

c++ - 如何在 .dll 类方法参数中传递对象?

java - 如何在一个命令中为所有产品风格运行 lint - Android?

java - 使用 Jboss7 加载资源返回 null

mysql - 为什么通过脚本创建表与通过 INSERT SELECT 创建表的时间有如此巨大的差异?

c# - 在 C# 中,将成员变量复制到本地堆栈变量是否会提高性能?

java - 快速重绘 map 的有效方法(Java/JPanel)

Java面向对象编程: referencing subclass object

javascript中的java关键字

java - Windows 中出现奇怪的 Java lambda 错误,但 Linux 中没有