31 package com.google.protobuf;
35 import java.io.IOException;
36 import java.util.concurrent.ConcurrentHashMap;
37 import java.util.concurrent.ConcurrentMap;
44 final class Protobuf {
45 private static final Protobuf INSTANCE =
new Protobuf();
47 private final SchemaFactory schemaFactory;
50 private final ConcurrentMap<Class<?>, Schema<?>> schemaCache =
51 new ConcurrentHashMap<Class<?>, Schema<?>>();
54 public static Protobuf getInstance() {
59 public <T>
void writeTo(
T message, Writer writer)
throws IOException {
64 public <T>
void mergeFrom(
T message, Reader reader)
throws IOException {
65 mergeFrom(
message, reader, ExtensionRegistryLite.getEmptyRegistry());
69 public <T>
void mergeFrom(
T message, Reader reader, ExtensionRegistryLite extensionRegistry)
75 public <T>
void makeImmutable(
T message) {
88 public <T> Schema<T> schemaFor(Class<T> messageType) {
89 checkNotNull(messageType,
"messageType");
90 @SuppressWarnings(
"unchecked")
91 Schema<
T> schema = (Schema<
T>) schemaCache.get(messageType);
93 schema = schemaFactory.createSchema(messageType);
94 @SuppressWarnings(
"unchecked")
95 Schema<
T>
previous = (Schema<
T>) registerSchema(messageType, schema);
105 @SuppressWarnings(
"unchecked")
107 return schemaFor((Class<T>)
message.getClass());
118 public Schema<?> registerSchema(Class<?> messageType, Schema<?> schema) {
119 checkNotNull(messageType,
"messageType");
120 checkNotNull(schema,
"schema");
121 return schemaCache.putIfAbsent(messageType, schema);
133 public Schema<?> registerSchemaOverride(Class<?> messageType, Schema<?> schema) {
134 checkNotNull(messageType,
"messageType");
135 checkNotNull(schema,
"schema");
136 return schemaCache.put(messageType, schema);
140 schemaFactory =
new ManifestSchemaFactory();
143 int getTotalSchemaSize() {
145 for (Schema<?> schema : schemaCache.values()) {
146 if (schema instanceof MessageSchema) {
147 result += ((MessageSchema) schema).getSchemaSize();