View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.accumulo.core.util;
18  
19  import org.apache.accumulo.core.data.ByteSequence;
20  
21  public class ByteArrayBackedCharSequence implements CharSequence {
22    
23    private byte[] data;
24    private int offset;
25    private int len;
26    
27    public ByteArrayBackedCharSequence(byte[] data, int offset, int len) {
28      this.data = data;
29      this.offset = offset;
30      this.len = len;
31    }
32    
33    public ByteArrayBackedCharSequence(byte[] data) {
34      this(data, 0, data.length);
35    }
36    
37    public ByteArrayBackedCharSequence() {
38      this(null, 0, 0);
39    }
40    
41    public void set(byte[] data, int offset, int len) {
42      this.data = data;
43      this.offset = offset;
44      this.len = len;
45    }
46    
47    @Override
48    public char charAt(int index) {
49      return (char) (0xff & data[offset + index]);
50    }
51    
52    @Override
53    public int length() {
54      return len;
55    }
56    
57    @Override
58    public CharSequence subSequence(int start, int end) {
59      return new ByteArrayBackedCharSequence(data, offset + start, end - start);
60    }
61    
62    public String toString() {
63      return new String(data, offset, len);
64    }
65    
66    public void set(ByteSequence bs) {
67      set(bs.getBackingArray(), bs.offset(), bs.length());
68    }
69  }