Java 如何写瓦尼拉纪事
有一个非常简单的poc,例如: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
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来提高性能和减少消息。您能给出整个堆栈跟踪吗?我假设您有默认设置,并且您的消息相对较小。我明白外部化的意思,谢谢,但我仍然在玩。