Java 如何写瓦尼拉纪事

Java 如何写瓦尼拉纪事,java,chronicle,Java,Chronicle,有一个非常简单的poc,例如: IndexedChronicle chronicle = getChronicle("basic"); ExcerptAppender appender = chronicle.createAppender(); appender.startExcerpt(); appender.writeObject(new MessageKey("type", 123L)); appender.finish(); Excerp

有一个非常简单的poc,例如:

    IndexedChronicle chronicle = getChronicle("basic");
    ExcerptAppender appender = chronicle.createAppender();
    appender.startExcerpt();
    appender.writeObject(new MessageKey("type", 123L));
    appender.finish();

    ExcerptTailer tailer = chronicle.createTailer();
    while(tailer.nextIndex()) {
        MessageKey key = (MessageKey) tailer.readObject();
        System.out.println("key " + key);
    }

    VanillaChronicle vcron = getVainllaChronicle("vanilla");
    VanillaAppender app = vcron.createAppender();
    app.startExcerpt();
    app.writeObject(new MessageKey("type", 123L));
    app.finish();

    ExcerptTailer vtail = vcron.createTailer();
    while(vtail.nextIndex()) {
        MessageKey key = (MessageKey) vtail.readObject();
        System.out.println("key " + key);
    }
VanillaAppender
上的
writeObject
方法中,为我提供了一个
IndexOutOfBoundsException

然而,两者之间几乎没有什么区别,也没有什么特别的区别

有人能建议如何使用它吗

更新:

我重新安排了代码,使其与peters完全相同(实际上是复制的),但我仍然得到以下例外:

Exception in thread "main" java.lang.IndexOutOfBoundsException: position is beyond the end of the buffer 372 > -190495716
  at net.openhft.lang.io.NativeBytes.checkEndOfBuffer(NativeBytes.java:518)
  at net.openhft.lang.io.AbstractBytes.writeObject(AbstractBytes.java:1897)
  at main.ChronicleTest.main(ChronicleTest.java:31)
导入的版本是3.2.1

<dependency>
  <groupId>net.openhft</groupId>
  <artifactId>chronicle</artifactId>
  <version>3.2.1</version>
</dependency>

net.openhft
编年史
3.2.1

当我尝试使用编年史3.2.1时

public class SO25623856Main {
    public static void main(String[] args) throws IOException {
        Chronicle vcron = new VanillaChronicle("vanilla");
        ExcerptAppender app = vcron.createAppender();
        app.startExcerpt();
        app.writeObject(new MessageKey("type", 123L));
        app.finish();

        ExcerptTailer vtail = vcron.createTailer();
        while (vtail.nextIndex()) {
            MessageKey key = (MessageKey) vtail.readObject();
            System.out.println("key " + key);
        }
        vcron.close();
    }
}

class MessageKey implements Serializable {

    private String type;
    private long l;

    public MessageKey(String type, long l) {

        this.type = type;
        this.l = l;
    }

    @Override
    public String toString() {
        return "MessageKey{" +
                "type='" + type + '\'' +
                ", l=" + l +
                '}';
    }
}
它打印

key MessageKey{type='type', l=123}

顺便说一句,我建议您使用Externalizable或ByteMarshallable来提高性能和减少消息。

您能给出整个堆栈跟踪吗?我假设您有默认设置,并且您的消息相对较小。我明白外部化的意思,谢谢,但我仍然在玩。