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

网格计算

开发平台:

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.record;
  19. import java.io.IOException;
  20. import java.util.TreeMap;
  21. import java.util.ArrayList;
  22. import java.io.PrintStream;
  23. import java.io.OutputStream;
  24. import java.io.UnsupportedEncodingException;
  25. /**
  26.  */
  27. public class CsvRecordOutput implements RecordOutput {
  28.   private PrintStream stream;
  29.   private boolean isFirst = true;
  30.     
  31.   private void throwExceptionOnError(String tag) throws IOException {
  32.     if (stream.checkError()) {
  33.       throw new IOException("Error serializing "+tag);
  34.     }
  35.   }
  36.  
  37.   private void printCommaUnlessFirst() {
  38.     if (!isFirst) {
  39.       stream.print(",");
  40.     }
  41.     isFirst = false;
  42.   }
  43.     
  44.   /** Creates a new instance of CsvRecordOutput */
  45.   public CsvRecordOutput(OutputStream out) {
  46.     try {
  47.       stream = new PrintStream(out, true, "UTF-8");
  48.     } catch (UnsupportedEncodingException ex) {
  49.       throw new RuntimeException(ex);
  50.     }
  51.   }
  52.     
  53.   public void writeByte(byte b, String tag) throws IOException {
  54.     writeLong((long)b, tag);
  55.   }
  56.     
  57.   public void writeBool(boolean b, String tag) throws IOException {
  58.     printCommaUnlessFirst();
  59.     String val = b ? "T" : "F";
  60.     stream.print(val);
  61.     throwExceptionOnError(tag);
  62.   }
  63.     
  64.   public void writeInt(int i, String tag) throws IOException {
  65.     writeLong((long)i, tag);
  66.   }
  67.     
  68.   public void writeLong(long l, String tag) throws IOException {
  69.     printCommaUnlessFirst();
  70.     stream.print(l);
  71.     throwExceptionOnError(tag);
  72.   }
  73.     
  74.   public void writeFloat(float f, String tag) throws IOException {
  75.     writeDouble((double)f, tag);
  76.   }
  77.     
  78.   public void writeDouble(double d, String tag) throws IOException {
  79.     printCommaUnlessFirst();
  80.     stream.print(d);
  81.     throwExceptionOnError(tag);
  82.   }
  83.     
  84.   public void writeString(String s, String tag) throws IOException {
  85.     printCommaUnlessFirst();
  86.     stream.print(Utils.toCSVString(s));
  87.     throwExceptionOnError(tag);
  88.   }
  89.     
  90.   public void writeBuffer(Buffer buf, String tag)
  91.     throws IOException {
  92.     printCommaUnlessFirst();
  93.     stream.print(Utils.toCSVBuffer(buf));
  94.     throwExceptionOnError(tag);
  95.   }
  96.     
  97.   public void startRecord(Record r, String tag) throws IOException {
  98.     if (tag != null && !"".equals(tag)) {
  99.       printCommaUnlessFirst();
  100.       stream.print("s{");
  101.       isFirst = true;
  102.     }
  103.   }
  104.     
  105.   public void endRecord(Record r, String tag) throws IOException {
  106.     if (tag == null || "".equals(tag)) {
  107.       stream.print("n");
  108.       isFirst = true;
  109.     } else {
  110.       stream.print("}");
  111.       isFirst = false;
  112.     }
  113.   }
  114.     
  115.   public void startVector(ArrayList v, String tag) throws IOException {
  116.     printCommaUnlessFirst();
  117.     stream.print("v{");
  118.     isFirst = true;
  119.   }
  120.     
  121.   public void endVector(ArrayList v, String tag) throws IOException {
  122.     stream.print("}");
  123.     isFirst = false;
  124.   }
  125.     
  126.   public void startMap(TreeMap v, String tag) throws IOException {
  127.     printCommaUnlessFirst();
  128.     stream.print("m{");
  129.     isFirst = true;
  130.   }
  131.     
  132.   public void endMap(TreeMap v, String tag) throws IOException {
  133.     stream.print("}");
  134.     isFirst = false;
  135.   }
  136. }