DataInputBuffer.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:3k
源码类别:

网格计算

开发平台:

Java

  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. package org.apache.hadoop.io;
  19. import java.io.*;
  20. /** A reusable {@link DataInput} implementation that reads from an in-memory
  21.  * buffer.
  22.  *
  23.  * <p>This saves memory over creating a new DataInputStream and
  24.  * ByteArrayInputStream each time data is read.
  25.  *
  26.  * <p>Typical usage is something like the following:<pre>
  27.  *
  28.  * DataInputBuffer buffer = new DataInputBuffer();
  29.  * while (... loop condition ...) {
  30.  *   byte[] data = ... get data ...;
  31.  *   int dataLength = ... get data length ...;
  32.  *   buffer.reset(data, dataLength);
  33.  *   ... read buffer using DataInput methods ...
  34.  * }
  35.  * </pre>
  36.  *  
  37.  */
  38. public class DataInputBuffer extends DataInputStream {
  39.   private static class Buffer extends ByteArrayInputStream {
  40.     public Buffer() {
  41.       super(new byte[] {});
  42.     }
  43.     public void reset(byte[] input, int start, int length) {
  44.       this.buf = input;
  45.       this.count = start+length;
  46.       this.mark = start;
  47.       this.pos = start;
  48.     }
  49.     public byte[] getData() { return buf; }
  50.     public int getPosition() { return pos; }
  51.     public int getLength() { return count; }
  52.   }
  53.   private Buffer buffer;
  54.   
  55.   /** Constructs a new empty buffer. */
  56.   public DataInputBuffer() {
  57.     this(new Buffer());
  58.   }
  59.   private DataInputBuffer(Buffer buffer) {
  60.     super(buffer);
  61.     this.buffer = buffer;
  62.   }
  63.   /** Resets the data that the buffer reads. */
  64.   public void reset(byte[] input, int length) {
  65.     buffer.reset(input, 0, length);
  66.   }
  67.   /** Resets the data that the buffer reads. */
  68.   public void reset(byte[] input, int start, int length) {
  69.     buffer.reset(input, start, length);
  70.   }
  71.   
  72.   public byte[] getData() {
  73.     return buffer.getData();
  74.   }
  75.   /** Returns the current position in the input. */
  76.   public int getPosition() { return buffer.getPosition(); }
  77.   /** Returns the length of the input. */
  78.   public int getLength() { return buffer.getLength(); }
  79. }