* </ul>
*/
public final class QName extends AbstractQName implements Comparable<QName> {
+ /**
+ * A {@link DataInput} which has an understanding of {@link QName}'s semantics.
+ */
+ @Beta
+ public interface QNameAwareDataInput extends DataInput {
+ /**
+ * Read a {@link QName} from the stream.
+ *
+ * @return A QName
+ * @throws IOException if an I/O error occurs.
+ */
+ @NonNull QName readQName() throws IOException;
+ }
+
+ @Beta
+ public interface QNameAwareDataOutput extends DataOutput {
+ /**
+ * Write a {@link QName} into the stream.
+ *
+ * @param qname A QName
+ * @throws IOException if an I/O error occurs.
+ */
+ void writeQName(@NonNull QName qname) throws IOException;
+ }
+
private static final Interner<QName> INTERNER = Interners.newWeakInterner();
// Note: 5398411242927766414L is used for versions < 3.0.0 without writeReplace
private static final long serialVersionUID = 1L;
* @throws IOException if I/O error occurs
*/
public static @NonNull QName readFrom(final DataInput in) throws IOException {
+ if (in instanceof QNameAwareDataInput) {
+ return ((QNameAwareDataInput) in).readQName();
+ }
+
final QNameModule module = QNameModule.readFrom(in);
return new QName(module, checkLocalName(in.readUTF()));
}
@Override
public void writeTo(final DataOutput out) throws IOException {
- module.writeTo(out);
- out.writeUTF(getLocalName());
+ if (out instanceof QNameAwareDataOutput) {
+ ((QNameAwareDataOutput) out).writeQName(this);
+ } else {
+ module.writeTo(out);
+ out.writeUTF(getLocalName());
+ }
}
@Override
import java.io.IOException;
import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QName.QNameAwareDataInput;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
* and {@link SchemaPath}s.
*/
@Beta
-public interface NormalizedNodeDataInput extends DataInput {
+public interface NormalizedNodeDataInput extends QNameAwareDataInput {
/**
* Interpret current stream position as a NormalizedNode, stream its events into a NormalizedNodeStreamWriter.
*
YangInstanceIdentifier readYangInstanceIdentifier() throws IOException;
- @NonNull QName readQName() throws IOException;
-
PathArgument readPathArgument() throws IOException;
@Deprecated(forRemoval = true)
package org.opendaylight.yangtools.yang.data.codec.binfmt;
import com.google.common.annotations.Beta;
-import java.io.DataOutput;
import java.io.IOException;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QName.QNameAwareDataOutput;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
*/
@Beta
@NonNullByDefault
-public interface NormalizedNodeDataOutput extends AutoCloseable, DataOutput {
- void writeQName(QName qname) throws IOException;
+public interface NormalizedNodeDataOutput extends AutoCloseable, QNameAwareDataOutput {
void writeNormalizedNode(NormalizedNode normalizedNode) throws IOException;