<R> @Nullable R readAttributeRaw(final int fileId,
                                   final @NotNull FileAttribute attribute,
                                   final ByteBufferReader<R> reader) throws IOException {
    if (!(attributesStorage instanceof AttributesStorageOverBlobStorage newAttributesStorage)) {
      throw new UnsupportedOperationException("Raw attribute access is not implemented for " + attributesStorage.getClass().getName());
    }

    connection.ensureFileIdIsValid(fileId);

    return newAttributesStorage.readAttributeRaw(connection, fileId, attribute, buffer -> {
      if (attribute.isVersioned()) {
        final int actualVersion = DataInputOutputUtil.readINT(buffer);
        if (actualVersion != attribute.getVersion()) {
          return null;
        }
      }
      return reader.read(buffer);
    });
  }
<R> @Nullable R readAttributeRaw(final int fileId,
                                   final @NotNull FileAttribute attribute,
                                   final ByteBufferReader<R> reader)