blob: 59012bcee87c0b4f9db7eb9d64e3e5d08839a9ba [file] [log] [blame]
/**
* 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.hadoop.typedbytes;
import java.io.DataOutput;
import java.io.IOException;
import java.util.ArrayList;
import java.util.TreeMap;
import org.apache.hadoop.record.Buffer;
import org.apache.hadoop.record.Record;
import org.apache.hadoop.record.RecordOutput;
/**
* Deserialized for records that reads typed bytes.
*/
public class TypedBytesRecordOutput implements RecordOutput {
private TypedBytesOutput out;
private TypedBytesRecordOutput() {}
private void setTypedBytesOutput(TypedBytesOutput out) {
this.out = out;
}
private static ThreadLocal tbOut = new ThreadLocal() {
protected synchronized Object initialValue() {
return new TypedBytesRecordOutput();
}
};
/**
* Get a thread-local typed bytes record input for the supplied
* {@link TypedBytesOutput}.
*
* @param out typed bytes output object
* @return typed bytes record output corresponding to the supplied
* {@link TypedBytesOutput}.
*/
public static TypedBytesRecordOutput get(TypedBytesOutput out) {
TypedBytesRecordOutput bout = (TypedBytesRecordOutput) tbOut.get();
bout.setTypedBytesOutput(out);
return bout;
}
/**
* Get a thread-local typed bytes record output for the supplied
* {@link DataOutput}.
*
* @param out data output object
* @return typed bytes record output corresponding to the supplied
* {@link DataOutput}.
*/
public static TypedBytesRecordOutput get(DataOutput out) {
return get(TypedBytesOutput.get(out));
}
/** Creates a new instance of TypedBytesRecordOutput. */
public TypedBytesRecordOutput(TypedBytesOutput out) {
this.out = out;
}
/** Creates a new instance of TypedBytesRecordOutput. */
public TypedBytesRecordOutput(DataOutput out) {
this(new TypedBytesOutput(out));
}
public void writeBool(boolean b, String tag) throws IOException {
out.writeBool(b);
}
public void writeBuffer(Buffer buf, String tag) throws IOException {
out.writeBytes(buf.get());
}
public void writeByte(byte b, String tag) throws IOException {
out.writeByte(b);
}
public void writeDouble(double d, String tag) throws IOException {
out.writeDouble(d);
}
public void writeFloat(float f, String tag) throws IOException {
out.writeFloat(f);
}
public void writeInt(int i, String tag) throws IOException {
out.writeInt(i);
}
public void writeLong(long l, String tag) throws IOException {
out.writeLong(l);
}
public void writeString(String s, String tag) throws IOException {
out.writeString(s);
}
public void startRecord(Record r, String tag) throws IOException {
out.writeListHeader();
}
public void startVector(ArrayList v, String tag) throws IOException {
out.writeVectorHeader(v.size());
}
public void startMap(TreeMap m, String tag) throws IOException {
out.writeMapHeader(m.size());
}
public void endRecord(Record r, String tag) throws IOException {
out.writeListFooter();
}
public void endVector(ArrayList v, String tag) throws IOException {}
public void endMap(TreeMap m, String tag) throws IOException {}
}