| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.pig.builtin; |
| |
| import java.io.IOException; |
| |
| import org.apache.pig.LoadCaster; |
| import org.apache.pig.PigStreamingBase; |
| import org.apache.pig.data.WritableByteArray; |
| import org.apache.pig.data.Tuple; |
| import org.apache.pig.impl.util.StorageUtil; |
| |
| /** |
| * The default implementation of {@link PigStreamingBase}. |
| * It converts tuples into <code>fieldDel</code> separated lines |
| * and <code>fieldDel</code> separated lines into tuples. |
| * |
| */ |
| public class PigStreaming extends PigStreamingBase { |
| |
| private byte recordDel = '\n'; |
| |
| private byte fieldDel = '\t'; |
| |
| private WritableByteArray out; |
| |
| /** |
| * The constructor that uses the default field delimiter. |
| */ |
| public PigStreaming() { |
| out = new WritableByteArray(); |
| } |
| |
| /** |
| * The constructor that accepts a user-specified field |
| * delimiter. |
| * |
| * @param delimiter a <code>String</code> specifying the field |
| * delimiter. |
| */ |
| public PigStreaming(String delimiter) { |
| this(); |
| fieldDel = StorageUtil.parseFieldDel(delimiter); |
| } |
| |
| @Override |
| public WritableByteArray serializeToBytes(Tuple t) throws IOException { |
| out.reset(); |
| int sz = t.size(); |
| for (int i=0; i<sz; i++) { |
| Object field = t.get(i); |
| |
| StorageUtil.putField(out,field); |
| |
| if (i == sz - 1) { |
| // last field in tuple. |
| out.write(recordDel); |
| } else { |
| out.write(fieldDel); |
| } |
| } |
| return out; |
| } |
| |
| @Override |
| public Tuple deserialize(byte[] bytes, int offset, int length) throws IOException { |
| return StorageUtil.bytesToTuple(bytes, offset, length, fieldDel); |
| } |
| |
| @Override |
| public LoadCaster getLoadCaster() throws IOException { |
| return new Utf8StorageConverter(); |
| } |
| |
| } |