docs: Component addComponent(Consumer<IOException> onError) {
          Component component;
          try {
              long readable = readableBytes(data);
              long offset = position.getAndUpdate(p -> readable);
              int length = new Long(readable - offset).intValue();
              component = new Component(length, offset);
              components.add(component);
          } catch (IOException e) {
              onError.accept(e);
              return null;
          }
  
          if (!data.isInMemory()) {
              fileAccess.getAndUpdate(channel -> {
                  if (channel == null) {
                      try {
                          return new RandomAccessFile(data.getFile(), "r");
                      } catch (IOException e) {
                          onError.accept(e);
                      }
                  }
                  return channel;
              });
          }
  
          return component;
      }