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

网格计算

开发平台:

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.streaming;
  19. import java.io.IOException;
  20. import org.apache.hadoop.io.Text;
  21. import org.apache.hadoop.util.LineReader;
  22. public class StreamKeyValUtil {
  23.   /**
  24.    * Find the first occured tab in a UTF-8 encoded string
  25.    * @param utf a byte array containing a UTF-8 encoded string
  26.    * @param start starting offset
  27.    * @param length no. of bytes
  28.    * @return position that first tab occures otherwise -1
  29.    */
  30.   public static int findTab(byte [] utf, int start, int length) {
  31.     for(int i=start; i<(start+length); i++) {
  32.       if (utf[i]==(byte)'t') {
  33.         return i;
  34.       }
  35.     }
  36.     return -1;      
  37.   }
  38.   /**
  39.    * Find the first occured tab in a UTF-8 encoded string
  40.    * @param utf a byte array containing a UTF-8 encoded string
  41.    * @return position that first tab occures otherwise -1
  42.    */
  43.   public static int findTab(byte [] utf) {
  44.     return org.apache.hadoop.util.UTF8ByteArrayUtils.findNthByte(utf, 0, 
  45.         utf.length, (byte)'t', 1);
  46.   }
  47.   /**
  48.    * split a UTF-8 byte array into key and value 
  49.    * assuming that the delimilator is at splitpos. 
  50.    * @param utf utf-8 encoded string
  51.    * @param start starting offset
  52.    * @param length no. of bytes
  53.    * @param key contains key upon the method is returned
  54.    * @param val contains value upon the method is returned
  55.    * @param splitPos the split pos
  56.    * @param separatorLength the length of the separator between key and value
  57.    * @throws IOException
  58.    */
  59.   public static void splitKeyVal(byte[] utf, int start, int length, 
  60.                                  Text key, Text val, int splitPos,
  61.                                  int separatorLength) throws IOException {
  62.     if (splitPos<start || splitPos >= (start+length))
  63.       throw new IllegalArgumentException("splitPos must be in the range " +
  64.                                          "[" + start + ", " + (start+length) + "]: " + splitPos);
  65.     int keyLen = (splitPos-start);
  66.     byte [] keyBytes = new byte[keyLen];
  67.     System.arraycopy(utf, start, keyBytes, 0, keyLen);
  68.     int valLen = (start+length)-splitPos-separatorLength;
  69.     byte [] valBytes = new byte[valLen];
  70.     System.arraycopy(utf, splitPos+separatorLength, valBytes, 0, valLen);
  71.     key.set(keyBytes);
  72.     val.set(valBytes);
  73.   }
  74.   /**
  75.    * split a UTF-8 byte array into key and value 
  76.    * assuming that the delimilator is at splitpos. 
  77.    * @param utf utf-8 encoded string
  78.    * @param start starting offset
  79.    * @param length no. of bytes
  80.    * @param key contains key upon the method is returned
  81.    * @param val contains value upon the method is returned
  82.    * @param splitPos the split pos
  83.    * @throws IOException
  84.    */
  85.   public static void splitKeyVal(byte[] utf, int start, int length, 
  86.                                  Text key, Text val, int splitPos) throws IOException {
  87.     splitKeyVal(utf, start, length, key, val, splitPos, 1);
  88.   }
  89.   
  90.   /**
  91.    * split a UTF-8 byte array into key and value 
  92.    * assuming that the delimilator is at splitpos. 
  93.    * @param utf utf-8 encoded string
  94.    * @param key contains key upon the method is returned
  95.    * @param val contains value upon the method is returned
  96.    * @param splitPos the split pos
  97.    * @param separatorLength the length of the separator between key and value
  98.    * @throws IOException
  99.    */
  100.   public static void splitKeyVal(byte[] utf, Text key, Text val, int splitPos, 
  101.                                  int separatorLength) 
  102.     throws IOException {
  103.     splitKeyVal(utf, 0, utf.length, key, val, splitPos, separatorLength);
  104.   }
  105.   /**
  106.    * split a UTF-8 byte array into key and value 
  107.    * assuming that the delimilator is at splitpos. 
  108.    * @param utf utf-8 encoded string
  109.    * @param key contains key upon the method is returned
  110.    * @param val contains value upon the method is returned
  111.    * @param splitPos the split pos
  112.    * @throws IOException
  113.    */
  114.   public static void splitKeyVal(byte[] utf, Text key, Text val, int splitPos) 
  115.     throws IOException {
  116.     splitKeyVal(utf, 0, utf.length, key, val, splitPos, 1);
  117.   }
  118.   
  119.   /**
  120.    * Read a utf8 encoded line from a data input stream. 
  121.    * @param lineReader LineReader to read the line from.
  122.    * @param out Text to read into
  123.    * @return number of bytes read 
  124.    * @throws IOException
  125.    */
  126.   public static int readLine(LineReader lineReader, Text out) 
  127.   throws IOException {
  128.     out.clear();
  129.     return lineReader.readLine(out);
  130.   }
  131. }