2014-09-02 3 views
2

Имея очень простой ДОУ, такие как этот:Как написать VanillaChronicle

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

дает мне IndexOutOfBoundsException в writeObject метода на VanillaAppender.

Однако есть небольшая разница, и ничего исключительно отличается в docs

Может кто-нибудь подскажет, как его следует использовать?

Update:

я переоформлена код таким образом, он стал идентичным Петерс (скопировано его, на самом деле), но я все еще получаю это исключение:

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> 
+0

Можете ли вы дать всю трассировку стека? Я предполагаю, что у вас есть настройки по умолчанию, и ваше сообщение относительно невелико. –

ответ

1

Когда я пытаюсь это с Chronicle 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 для повышения производительности и небольших сообщений.

+0

Я пришел к выводу об экстернализации, спасибо, но я все еще играю. –