io.protostuff.YamlIOUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of protostuff-yaml Show documentation
Show all versions of protostuff-yaml Show documentation
protostuff serialization using yaml format
//========================================================================
//Copyright 2007-2010 David Yu [email protected]
//------------------------------------------------------------------------
//Licensed 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 io.protostuff;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
/**
* Utility for the YAML serialization of messages and objects tied to a schema.
*
* @author David Yu
* @created Jun 28, 2010
*/
public final class YamlIOUtil
{
private static final byte[] START_DIRECTIVE = new byte[] {
(byte) '-', (byte) '-', (byte) '-', (byte) ' '
};
/**
* Serializes the {@code message} into a byte array with the supplied buffer.
*/
public static byte[] toByteArray(T message, Schema schema, LinkedBuffer buffer)
{
if (buffer.start != buffer.offset)
throw new IllegalArgumentException("Buffer previously used and had not been reset.");
final YamlOutput output = new YamlOutput(buffer, schema);
try
{
output.tail = YamlOutput.writeTag(
schema.messageName(),
false,
output.sink,
output,
output.sink.writeByteArray(
START_DIRECTIVE,
output,
buffer));
schema.writeTo(output, message);
}
catch (IOException e)
{
throw new RuntimeException("Serializing to a byte array threw an IOException " +
"(should never happen).", e);
}
return output.toByteArray();
}
/**
* Serializes the {@code message} into the {@link LinkedBuffer}.
*
* @return the total bytes written to the output.
*/
public static int writeTo(LinkedBuffer buffer, T message, Schema schema)
{
if (buffer.start != buffer.offset)
throw new IllegalArgumentException("Buffer previously used and had not been reset.");
final YamlOutput output = new YamlOutput(buffer, schema);
try
{
output.tail = YamlOutput.writeTag(
schema.messageName(),
false,
output.sink,
output,
output.sink.writeByteArray(
START_DIRECTIVE,
output,
buffer));
schema.writeTo(output, message);
}
catch (IOException e)
{
throw new RuntimeException("Serializing to a LinkedBuffer threw an IOException " +
"(should never happen).", e);
}
return output.getSize();
}
/**
* Serializes the {@code message} into an {@link OutputStream} with the supplied buffer.
*
* @return the total bytes written to the output.
*/
public static int writeTo(OutputStream out, T message, Schema schema,
LinkedBuffer buffer) throws IOException
{
if (buffer.start != buffer.offset)
throw new IllegalArgumentException("Buffer previously used and had not been reset.");
final YamlOutput output = new YamlOutput(buffer, out, schema);
output.tail = YamlOutput.writeTag(
schema.messageName(),
false,
output.sink,
output,
output.sink.writeByteArray(
START_DIRECTIVE,
output,
buffer));
schema.writeTo(output, message);
LinkedBuffer.writeTo(out, buffer);
return output.getSize();
}
/**
* Serializes the {@code messages} a {@link LinkedBuffer} using the given schema.
*
* @return the total bytes written to the output.
*/
public static int writeListTo(LinkedBuffer buffer, List messages,
Schema schema)
{
if (buffer.start != buffer.offset)
throw new IllegalArgumentException("Buffer previously used and had not been reset.");
final YamlOutput output = new YamlOutput(buffer, schema);
try
{
output.tail = YamlOutput.writeTag(
schema.messageName(),
true,
output.sink,
output,
output.sink.writeByteArray(
START_DIRECTIVE,
output,
buffer));
for (T m : messages)
{
schema.writeTo(output.writeSequenceDelim(), m);
output.reset();
}
}
catch (IOException e)
{
throw new RuntimeException("Serializing to a LinkedBuffer threw an IOException " +
"(should never happen).", e);
}
return output.getSize();
}
/**
* Serializes the {@code messages} into an {@link OutputStream} using the given schema with the supplied buffer.
*
* @return the total bytes written to the output.
*/
public static int writeListTo(OutputStream out, List messages,
Schema schema, LinkedBuffer buffer) throws IOException
{
if (buffer.start != buffer.offset)
throw new IllegalArgumentException("Buffer previously used and had not been reset.");
final YamlOutput output = new YamlOutput(buffer, out, schema);
output.tail = YamlOutput.writeTag(
schema.messageName(),
true,
output.sink,
output,
output.sink.writeByteArray(
START_DIRECTIVE,
output,
buffer));
for (T m : messages)
{
schema.writeTo(output.writeSequenceDelim(), m);
output.reset();
}
LinkedBuffer.writeTo(out, buffer);
return output.getSize();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy