Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Logback: the reliable, generic, fast and flexible logging framework. Copyright (C) 1999-2011, QOS.ch. All rights reserved. This program and the accompanying materials are dual-licensed under either the terms of the Eclipse Public License v1.0 as published by the Eclipse Foundation or (per the licensee's choosing) under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation.
 
 package ch.qos.logback.core.encoder;
 
 import static ch.qos.logback.core.CoreConstants.BYTES_PER_INT;
 import static ch.qos.logback.core.encoder.ObjectStreamEncoder.START_PEBBLE;
 import static ch.qos.logback.core.encoder.ObjectStreamEncoder.STOP_PEBBLE;
 
 import java.util.List;

Restitute the contents of an input stream as java objects.

Parameters:
<E>
Author(s):
Ceki Gülcü
 
 public class EventObjectInputStream<E> extends InputStream {
 
   List<E> buffer = new ArrayList<E>();
 
   int index = 0;
 
     this. = new NonClosableInputStream(is);
   }
 
   @Override
   public int read() throws IOException {
     throw new UnsupportedOperationException(
         "Only the readEvent method is supported.");
   }

  
Returns the number of bytes available
 
   public int available() throws IOException {
     return .available();
   }
 
   public E readEvent() throws IOException {
 
     E event = getFromBuffer();
     if (event != null) {
       return event;
     }
 
     internalReset();
     int count = readHeader();
     if(count == -1) {
       return null;
     }
     readPayload(count);
     readFooter(count);
     return getFromBuffer();
   }
 
   private void  internalReset() {
      = 0;
     .clear();
   }
   
   E getFromBuffer() {
     if ( >= .size()) {
       return null;
     }
     return .get(this.++);
   }
 
   int readHeader() throws IOException {
     byte[] headerBA = new byte[4 * ];
     //System.out.println("available="+ncis.available());
     int bytesRead = .read(headerBA);
     if(bytesRead == -1) {
       return -1;
     }
     //System.out.println("**bytesRead="+bytesRead);
     
     //System.out.println(ByteArrayUtil.toHexString(headerBA));
     
     int offset = 0;
     int startPebble = ByteArrayUtil.readInt(headerBAoffset);
     if (startPebble != ) {
      throw new IllegalStateException(
          "Does not look like data created by ObjectStreamEncoder");
    }
    offset += ;
    int count = ByteArrayUtil.readInt(headerBAoffset);
    offset += ;
    int endPointer = ByteArrayUtil.readInt(headerBAoffset);
    offset += ;
    int checksum = ByteArrayUtil.readInt(headerBAoffset);
    if (checksum != ( ^ count)) {
      throw new IllegalStateException("Invalid checksum");
    }
    return count;
  }
  @SuppressWarnings("unchecked")
    E e = null;
    try {
      e = (E) ois.readObject();
      .add(e);
    } catch (ClassNotFoundException e1) {
      // FIXME Auto-generated catch block
      e1.printStackTrace();
    }
    return e;
  }
  void readFooter(int countthrows IOException {
    byte[] headerBA = new byte[2 * ];
    .read(headerBA);
    
    int offset = 0;
    int stopPebble = ByteArrayUtil.readInt(headerBAoffset);
    if (stopPebble != ) {
      throw new IllegalStateException(
          "Looks like a corrupt stream");
    }
    offset += ;
    int checksum = ByteArrayUtil.readInt(headerBAoffset);
    if (checksum != ( ^ count)) {
      throw new IllegalStateException("Invalid checksum");
    }
  }
  
  void readPayload(int countthrows IOException {
    List<E> eventList = new ArrayList<E>(count);
    for (int i = 0; i < counti++) {
      E e = (E) readEvents(ois);
      eventList.add(e);
    }
    ois.close();
  }
  public void close() throws IOException {
    .realClose();
  }
New to GrepCode? Check out our FAQ X