code: @Override
    public SeekableByteChannel open(
        final StorageResourceId resourceId, GoogleCloudStorageReadOptions readOptions)
        throws IOException {
      logger.atFine().log("open(%s, %s)", resourceId, readOptions);
      Preconditions.checkArgument(
          resourceId.isStorageObject(), "Expected full StorageObject id, got %s", resourceId);
  
      // The underlying channel doesn't initially read data, which means that we won't see a
      // FileNotFoundException until read is called. As a result, in order to find out if the object
      // exists, we'll need to do an RPC (metadata or data). A metadata check should be a less
      // expensive operation than a read data operation.
      GoogleCloudStorageItemInfo info;
      if (readOptions.getFastFailOnNotFound()) {
        info = getItemInfo(resourceId);
        if (!info.exists()) {
          throw GoogleCloudStorageExceptions.getFileNotFoundException(
              resourceId.getBucketName(), resourceId.getObjectName());
        }
      } else {
        info = null;
      }
  
      return new GoogleCloudStorageReadChannel(
          gcs,
          resourceId.getBucketName(),
          resourceId.getObjectName(),
          errorExtractor,
          clientRequestHelper,
          readOptions) {
  
        @Override
        @Nullable
        protected GoogleCloudStorageItemInfo getInitialMetadata() {
          return info;
        }
  
        @Override
        protected Storage.Objects.Get createRequest() throws IOException {
          return configureRequest(super.createRequest(), resourceId.getBucketName());
        }
      };
    }
docs: See {@link GoogleCloudStorage#open(StorageResourceId)} for details about expected behavior.