docs: public List<Pair<UIEvent, Table>> readEvents(long startOffset) throws IOException {
          if(endStaticInfoOffset >= file.length()){
              return Collections.emptyList();
          }
  
          List<Pair<UIEvent, Table>> out = new ArrayList<>();
          try (RandomAccessFile f = new RandomAccessFile(file, "r"); FileChannel fc = f.getChannel()) {
              f.seek(startOffset);
              while (f.getFilePointer() < f.length()) {
                  //read 2 header ints
                  int lengthHeader = f.readInt();
                  int lengthContent = f.readInt();
  
                  //Read header
                  ByteBuffer bb = ByteBuffer.allocate(lengthHeader);
                  f.getChannel().read(bb);
                  bb.flip();      //Flip for reading
                  UIEvent e = UIEvent.getRootAsUIEvent(bb);
  
                  //Read Content
                  bb = ByteBuffer.allocate(lengthContent);
                  f.getChannel().read(bb);
                  bb.flip();      //Flip for reading
  
                  byte infoType = e.eventType();
                  Table t;
                  switch (infoType) {
                      case UIEventType.ADD_NAME:
                          t = UIAddName.getRootAsUIAddName(bb);
                          break;
                      case UIEventType.SCALAR:
                      case UIEventType.ARRAY:
                          t = FlatArray.getRootAsFlatArray(bb);
                          break;
  
                      //TODO
                      case UIEventType.ARRAY_LIST:
                      case UIEventType.HISTOGRAM:
                      case UIEventType.IMAGE:
                      case UIEventType.SUMMARY_STATISTICS:
                      case UIEventType.OP_TIMING:
                      case UIEventType.HARDWARE_STATE:
                      case UIEventType.GC_EVENT:
                      default:
                          throw new RuntimeException("Unknown or not yet implemented event type: " + e.eventType());
                  }
  
                  //TODO do we need to close file here?
  
                  out.add(new Pair<>(e, t));
              }
              return out;
          }
      }