View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  package org.apache.hbase.cell;
20  
21  import org.apache.hadoop.classification.InterfaceAudience;
22  import org.apache.hadoop.classification.InterfaceStability;
23  import org.apache.hbase.Cell;
24  
25  /**
26   * Accepts a stream of Cells and adds them to its internal data structure. This can be used to build
27   * a block of cells during compactions and flushes, or to build a byte[] to send to the client. This
28   * could be backed by a List<KeyValue>, but more efficient implementations will append results to a
29   * byte[] to eliminate overhead, and possibly encode the cells further.
30   */
31  @InterfaceAudience.Private
32  @InterfaceStability.Evolving
33  public interface CellOutputStream {
34  
35    /**
36     * Implementation must copy the entire state of the Cell. If the appended Cell is modified
37     * immediately after the append method returns, the modifications must have absolutely no effect
38     * on the copy of the Cell that was added to the appender. For example, calling someList.add(cell)
39     * is not correct.
40     */
41    void write(Cell cell);
42  
43    /**
44     * Let the implementation decide what to do.  Usually means writing accumulated data into a byte[]
45     * that can then be read from the implementation to be sent to disk, put in the block cache, or
46     * sent over the network.
47     */
48    void flush();
49  
50  }