nizhikov commented on code in PR #11518: URL: https://github.com/apache/ignite/pull/11518#discussion_r1812515243
########## modules/core/src/main/java/org/apache/ignite/internal/jdbc2/lob/JdbcBlobBuffer.java: ########## @@ -0,0 +1,333 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.internal.jdbc2.lob; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * Buffer storing the binary data. + * + * <p>Buffer can start working in read-only mode if created wrapping the existing byte array which + * can not be modified. Any write operation switches it lazily to the read-write mode. This allows + * to prevent the unnecessary data copying. + * + * <p>Data is read via the InputStream API and modified via the OutputStream one. Changes done via + * OutputStream are visible via the InputStream even if InputStream is created before changes done. + * + * <p>InputStream and OutputStream created remain valid even if the underlying data storage changed from + * read-only to read-write. + * + * <p>Note however that implementation is not thread-safe. + */ +public class JdbcBlobBuffer { + /** The underlying data storage. */ + private JdbcBlobStorage storage; + + /** + * Create buffer which wraps the existing byte array and start working in the read-only mode. + * + * @param arr The byte array to be wrapped. + * @param off The offset to the first byte to be wrapped. + * @param len The length in bytes of the data to be wrapped. + */ + public static JdbcBlobBuffer createReadOnly(byte[] arr, int off, int len) { + return new JdbcBlobBuffer(new JdbcBlobReadOnlyStorage(arr, off, len)); + } + + /** + * Create buffer which takes ownerhip of and wraps the existing byte array and starts working in + * the read-write mode. + * + * @param arr The byte array to be wrapped. + */ + public static JdbcBlobBuffer createReadWrite(byte[] arr) { + return new JdbcBlobBuffer(new JdbcBlobReadWriteStorage(arr)); + } + + /** + * Create empty buffer which starts working in the read-write mode. + */ + public static JdbcBlobBuffer createReadWrite() { + return new JdbcBlobBuffer(new JdbcBlobReadWriteStorage()); + } + + /** + * Create shallow copy of the buffer passed. + * + * <p>Sharing of the underlying storage is intended. + * + * @param other Other buffer. + */ + public static JdbcBlobBuffer shallowCopy(JdbcBlobBuffer other) { + return new JdbcBlobBuffer(other.storage); + } + + /** + * Create buffer which wraps the passed storage instance. + * @param storage Storage instance. + */ + private JdbcBlobBuffer(JdbcBlobStorage storage) { + this.storage = storage; + } + + /** + * @return Total number of bytes in the buffer. + */ + public long totalCnt() { Review Comment: Le't rename this and all related variables to `length`, 'len` or `size` as this naming commonly used in API we working on. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: notifications-unsubscr...@ignite.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org